socket常见错误代码解析

socket常见错误代码解析
socket常见错误代码解析

socket常见错误代码解析

Socket error 0 - Directly send error

Socket error 10004 - Interrupted function call

Socket error 10013 - Permission denied

Socket error 10014 - Bad address

Socket error 10022 - Invalid argument

Socket error 10024 - Too many open files

Socket error 10035 - Resource temporarily unavailable

Socket error 10036 - Operation now in progress

Socket error 10037 - Operation already in progress

Socket error 10038 - Socket operation on non-socket

Socket error 10039 - Destination address required

Socket error 10040 - Message too long

Socket error 10041 - Protocol wrong type for socket

Socket error 10042 - Bad protocol option

Socket error 10043 - Protocol not supported

Socket error 10044 - Socket type not supported

Socket error 10045 - Operation not supported

Socket error 10046 - Protocol family not supported

Socket error 10047 - Address family not supported by protocol family Socket error 10048 - Address already in use

Socket error 10049 - Cannot assign requested address

Socket error 10050 - Network is down

Socket error 10051 - Network is unreachable

Socket error 10052 - Network dropped connection on reset

Socket error 10053 - Software caused connection abort

Socket error 10054 - Connection reset by peer

Socket error 10055 - No buffer space available

Socket error 10056 - Socket is already connected

Socket error 10057 - Socket is not connected

Socket error 10058 - Cannot send after socket shutdown

Socket error 10060 - Connection timed out

Socket error 10061 - Connection refused

Socket error 10064 - Host is down

Socket error 10065 - No route to host

Socket error 10067 - Too many processes

Socket error 10091 - Network subsystem is unavailable

Socket error 10092 - WINSOCK.DLL version out of range

Socket error 10093 - Successful WSAStartup not yet performed Socket error 10094 - Graceful shutdown in progress

Socket error 11001 - Host not found

Socket error 11002 - Non-authoritative host not found

Socket error 11003 - This is a non-recoverable error

Socket error 11004 - Valid name, no data record of requested type

WSAEADDRINUSE (10048) Address already in use

WSAECONNABORTED (10053) Software caused connection abort WSAECONNREFUSED (10061) Connection refused

WSAECONNRESET (10054) Connection reset by peer

WSAEDESTADDRREQ (10039) Destination address required

WSAEHOSTUNREACH (10065) No route to host

WSAEMFILE (10024) Too many open files

WSAENETDOWN (10050) Network is down

WSAENETRESET (10052) Network dropped connection

WSAENOBUFS (10055) No buffer space available

WSAENETUNREACH (10051) Network is unreachable

WSAETIMEDOUT (10060) Connection timed out

WSAHOST_NOT_FOUND (11001) Host not found

WSASYSNOTREADY (10091) Network sub-system is unavailable WSANOTINITIALISED (10093) WSAStartup() not performed

WSANO_DATA (11004) V alid name, no data of that type

WSANO_RECOVERY (11003) Non-recoverable query error

WSA TRY_AGAIN (11002) Non-authoritative host found

WSA VERNOTSUPPORTED (10092) Wrong WinSock DLL version

++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++

常見SOCKET錯誤返回碼

WSAEINTR (10004)被中斷的系統呼叫

當以阻攔式進行的WinSock函式被WSACancelBlockingCall()中斷的時候,這個阻攔式函式會得到WSAEINTR這個錯誤訊息。讀者要注意的是,當你的程序有用WSACancelBlockingCall去中斷阻攔式函式的時候,你必須為這個阻攔式函式寫處理WSAEINTR錯誤訊息的程序代碼,否則你的程序可能會出現些無預期的錯誤。

原則上,所有能以阻攔式進行的函式都可能會發生這個錯誤。

WSAEBADF (10009)錯誤的檔案代碼

柏克萊socket接口中,檔案描述子和socket描述子是相通的,開啟socket可以想像成開啟一個檔案。WSAEBADF在柏克萊socket界面的意義是指錯誤的socket描述子,這個錯誤的socket描述子可能是未經開啟的socket或是以關閉的socket。

在WinSock中有個相通的錯誤代碼WSAENOTSOCK,用來指定錯誤的socket描述子。詳細說明請參考WSAENOTSOCK部分。

WSAEACCES (10013)無此權限

對於柏克萊socket接口函式,這個錯誤發生的原因通常是開啟一個不具有開啟權限的檔案或socket。例如在UNIX上,一般的使用者不能開啟SOCK_RAW的socket,通常是超級使用者(super user)才有此權限。如果一般的使用者企圖開啟SOCK_RAW的socket,將會得到這個錯誤訊息。

對於WinSock API函式接口,發生此錯誤的函式有二:send()和sendto()。當利用send()或sendto()傳送數據的時候,將目的地址設成廣播地址( broadcast address ),但是並未呼叫setsockopt()設定SO_BROADCAST選項時便會發生WSAEACCES錯誤。

WSAEFAULT (10014)錯誤的內存地址

系統偵測出使用錯誤的內存地址。呼叫WinSock函式時,常常會有參數是以指標的方式傳入,這個指標可能是指向一個結構,如sockaddr_in結構,或是指向一個數據緩衝區。當程序不小心傳入一個錯誤內存未指的指針時,就會發生WSAEFAULT這個錯誤。此外,當指針所指向的內存區塊太小的時候,也會發生這個錯誤。

WSAEINV AL (10022)參數錯誤

如果傳入不正確的參數給WinSock函式的話,會導致WSAEINV AL這個錯誤。如果參數是一個結構的指針,此結構內容填入不正確的值,也會導致這個錯誤。例如,shutdown()函式的how()參數只能是0、1或2,若是設定成其它數值,就會出現這個錯誤。

在網絡程序的設計中,函式和函式之間的呼叫通常有一定的順序,如過不照這個順序進行,也會出現這個錯誤。底下是針對每個相關函式的詳細說明。

函式

錯誤發生的時機

accept()

呼叫accept()之前沒有成功呼叫listen()

bind()

已經成功呼叫bind()函式而指定stocket的名稱了

getstockname()

沒有呼叫bind()函式指定socket名稱

listen()

已經處於連接狀態或是socket沒有呼叫bind()函式指定socket名稱

recv()和recvfrom()

對於datagram socket,socket沒有呼叫bind()函式指定IP地址、port和協議等;對於stream

socket,連接尚未建立

send()和sendto()

對於datagram socket,socket沒有呼叫bind()函式指定IP地址、port和協議等;對於stream socket,連接尚未建立

原則上,所有函式其參數所能設定的值有一定的範圍,或是有一些特定的值,這些函式都有可能發生這個錯誤。

WSAEMFILE (10024)太多開啟的檔案

柏克萊socket接口的解釋是開啟過多的檔案,超過檔案開啟數的限制。在柏克萊socket將檔案和socket的開啟以檔案描述子(file descriptor)描述。WinSock對於socket是有別於檔案的,WSAEMFILE在WinSock的意義是開啟太多的socket。

這個程序通常發生在同一部機器中執行過多的網絡程序,以致開啟過多的socket。另一種可以避免的錯誤是應用程序沒有正常的關閉不用的socket,以致socket資源耗盡。

WSAEWOULDBLOCK (10035)函式作用阻攔中

當函式作用是以非阻攔式進行,而此刻的函式作用再返回時其函式作用尚未完成的時候,就會出現這個錯誤。舉例來說,假設send()以非阻攔式傳送一段數據至遠程主機,假設函式返回時得到WSAEWOULDBLOCK這個錯誤,這樣表示這一段數據不能在這一次的send()函式呼叫中傳送完。

對於connect()函式,這個錯誤表示尚未成功地連接上遠程主機,連接要求正在進行中。若你的程序中有利用setsockopt()函式以SO_LINGER設定時限,在呼叫closesocket()時有可能出現這個錯誤。

對於異步的網絡數據函式( WSAAsyncGetXXXXByYYYY())而言,得到WSAEWOULDBLOCK錯誤,表示要查詢的網絡數據目前無法取得。這通常是個暫時性的錯誤,應用程序可能稍後再呼叫相同的函式就會成功。

WSAEINPROGRESS (10036)有阻攔函式正在執行中

對於每個process或thread,WinSock只允許”一”個阻攔式函式的執行。如果已有阻攔式函式正在執行,而又呼叫到WinSock函式,函式會傳回WSAEINPROGRESS的錯誤。

這個錯誤也會發生在需要長執行時間的函式,如connect()。有一種情況是這樣:當執行”非阻攔式”的connect()函式兩次,由於是非阻攔式的connect(),第一次的呼叫傳回WSAEWOULDBLOCK錯誤碼。此時要求連接動作尚未完成,第二次的connect()呼叫就會得到WSAEINPROGRESS的錯誤。

我們的建議是在有可能發生這種錯誤的函式呼叫前加上WSAIsBlocking()判斷是否有阻攔式函式正在執行。如果有的話,我們可能需要將正在進行的阻攔式函式取消掉,或是將目前想要做的事取消掉。

WSAEALREADY (10037)函式作用已完成

這個錯誤的意思在柏克萊socket界面和WinSock函式的解釋上有很大的差別。柏克萊socket 接口的解釋是函式作用已完成;在WinSock中,WSAEALREADY的意思是:”你想要取消的異步事件已經被取消了!”,也就是當你呼叫WSACancelAsyncRequest()試圖去取消一個異步事件時,而該事件已被取消了。

WSAENOTSOCK (10038)非法的socket

通常WinSock函式都要以socket描述子當參數傳入,如果這個socket描述子所代表的socket 不是正確開啟的或是根本沒有開啟,函式就會得到WSAENOTSOCK錯誤。原則上,只要以socket描述子當參數傳入的函式都有發生WSAENOSOCK錯誤的可能。

WSAEDESTADDRREQ (10039)需要對方地址

當你要傳送數據給遠程機器,必須指定對方的地址(和port等等),才能正確送達。檢查看看你的應用程序是否在呼叫connect()或sendto()時,正確地填入對方的sockaddr結構。

WSAEMSGSIZE (10040)訊息太長,緩衝區無法容納

這個錯誤發生原因是由於訊息數據過大,緩衝區無法容納,這裡的緩衝區可能是使用者指定的或是系統內部用的緩衝區。會發生這個錯誤的函式有四:

函式

錯誤發生的時機

recv()、recvform()

利用datagram socket接收數據時,如果recv()、recvform()指定的緩衝區長度小於接收進來datagram,這時後過長的datagram會被丟棄並告訴函式WSAEMSGSIZE這個錯誤

send()、sendto()

利用datagram socket傳送數據時,如果送出的數據緩衝區大於WinSock所能傳遞datagram 的最大長度,這時send()和sendto()傳回發生WSAEMSGSIZ這個錯誤訊息

WSAEPROTOTYPE (10041)錯誤的協議型別

錯誤產生的原因是在socket()函式呼叫時指定了WinSock不支持的協議舉例來說,你不可以在steam socket(SOCK_STREAM)設定以UDP協議傳輸(IPPRO_UDP)。stream socket並不支持UDP通訊協議。如果你真的有心去測試的話,程序中故意如此呼叫

socket():hSock=socket(AF_INET,SOCK_STREAM,IPPROTO_UDP);你會發現,這樣的socket()函式呼叫會得到WSAEPROTONOSUPPORT錯誤。這顯然不對,照理應該得到WSAEPROTOTYPE這個錯誤才對。WSAEPROTOTYPE這個錯誤表示指定了錯誤的協議,而所指定的協議是該地址家族(協議家族)所支持的,但不適用於socket型別。以上述的例子來看,UDP協議是屬於AF_INET這個地址家族,但是並不能用於stream socket(SOCK_STREAM socket)上。WSAEPROTONOSUPPORT這個錯誤表示所指定的協議是該協議家族所不支持的,意思上和WSAEPROTOTYPE有點出入。

事實上,WSAEPROTOTYPE和WSAEPROTONOSUPPORT之間的差別是微乎其微的。在發展網絡程序的時候,這兩種錯誤都是代表著同一種狀況--協議指定錯誤。

總之,你永遠也沒辦法試出WSAEPROTOTYPE這個錯誤。

WSAENOPROTOOPT (10042)錯誤的協議選項(option)

這個錯誤主要是針對getsockopt()和setsockopt()函式的。這兩個函式可以以參數設定不同的選項而有不同的作用。對於每個選項多多少少會有些限制,如有些選項只能用在stream socket,而有些只能用在datagram socket。如果違反這些限制,就會發生這個錯誤。請看下表:

SO_DONTLINGER

SO_KEEPALIVE

SO_LINGER

SO_OOBINLINE

TCP_NODELAY

datagram socket ( SOCK_DGRAM )不支持這些選項

SO_DEBUG

SO_DONTROUTE

SO_RCVBUF

SO_SNDBUF

TCP_NODELAY

有些廠商的WinSock TCP/IP協議核心不支持這些選項

SO_ACCEPTCONN

SO_ERROR

SO_TYPE

這些選項只適用於getsockopt()函式,不能作用於setsockopt()函式WSAEPROTONOSUPPORT (10043)不支持的協議

WinSock 協議核心不支持所指定的通訊協議。舉例來說當你用socket()函式時,第二個參數指定為SOCK_STREAM,第三個參數指定為IPPROTO_ICMP,如此socket()呼叫會得到WSAEPROTONOSUPPORT這個錯誤。WinSock 1。1版並不支持ICMP協議,所以呼叫socket()指定ICMP這個協議,就會發生錯誤。事實上,產生WSAEPROTONPSUPPORT錯誤的狀況不只這樣,詳見WSAEPROTOTYPE。

WSAESOCKTNOSUPPORT (10044)不支援的socket型別

目前使用的WinSock版本不支持函式所指定的socket型別。舉例來說,完全根據WinSock 1.1版的規格書發展的WinSock協議核心,並不支持SOCK_RAW這個socket型別。在呼叫socket()函式時,地址家族選AF_INET( PF_INET )而socket型別選SOCK_RAW的話,就會發生這個錯誤。

有些廠商發展的WinSock協議核心除了支持WinSock 1.1版的規格書所規範之外,還提供許多不同的功能。我們建議您在發展程序時,如果有必要用到這些額外的功能,請好好考慮一下和其它環境兼容性的問題。

WSAEOPNOTSUPP (10045)作用函式不支持此類socket

函式作用不支持目前socket型別。舉例來說,accept()和listen()函式只能作用在連接導向的socket(stream socket),也就是stream socket上。對於recv()、recvform()、send()和sendto()函式,MSG_OOB也是只能用於連接導向的socket。

WSAEPFNOSUPPORT (10046)不支持的協議家族

目前的WinSock協議核心不支持所指定的協議家族。這個錯誤和WSAEAFNOSUPPORT很像,目前這個錯誤被WSAEAFNOSUPPORT所取代了,讀者可以參考WSAEAFNOSUPPORT 說明部分。

WSAEAFNOSUPPORT (10047)不支持的地址家族

使用協議不支持指定的地址家族。對於socket()函式,錯誤發生原因是函式轉物錯誤的參數。對於以sockaddr結構為參數的函數,錯誤發生的原因常是網絡協議不支持sockaddr結構中(sin_family成員)指定的地址家族。

WSAEADDRINUSE (10048)地址已被指定了

所指定的”地址”正在使用中。這裡的地址是指socket的名稱,包含三部分:協議、port和IP地址。這個錯誤發生的原因通常是應用程序試圖利用bind()函式去指定port時,此port 已被其它應用程序所佔用了。這種情況發生於在同一部主機上執行兩個相同性質(指定相同socket名稱)的server程序,第二的程序會因為第一個程序先佔用某個port而得到此錯誤訊息。

還有一種常見的情況就是在撰寫client 程序時,利用bind()去指定socket的port,此舉常會有這個錯誤發生。並非不能用bind()去指定socket的port,而是你無法確定程序執行的時候,所指定的port是否有其它程序正在使用。通常很少會在client程序中呼叫bind()函式,一般的client程序都是讓系統幫你選一個適當的port。

此外,應用程序可以利用setsockopt()的SO_REUSEADDR選項,允許port可以重複使用,可是我們並不鼓勵這樣做。這樣可能會造成TCP/IP核心在判斷應用程序上的困擾。

WSAEADDRNOTA V AIL (10049)無法指定地址

錯誤發生的原因通常是指定了該部機器不應該有的地址。這裡的地址包含三個部分:網絡協議、port和IP地址。

在柏克萊socket接口中,呼叫bind()時,若指定的IP地址不是本地機器該有的地址,就會出現這個錯誤。在呼叫connect()或sendto()函式時,如果sockaddr_in結構中的sin_port填”0”,如此也會導致這個錯誤(在UNXI上是EADDRNOTA V AIL錯誤)。

對於WinSock函式,錯誤發生的時機和柏克萊socket函式類似,bind()和connect()都會導致這樣的錯誤。

對於WinSock函式,錯誤發生的時機和柏克萊socket函式類似,bind()和connect()都會導致這樣的錯誤。WinSock 1.1版的規格書中並沒有提到bind()函式會導致WSAEADDRNOTA V AIL錯誤,不過根據我們測試的結果,bind()也會導致這樣的錯誤。

WSAENETDOWN (10050)網絡出錯

下層的網絡系統發生問題,WinSock函式無法執行。這是一個相當嚴重的問題,這會使得幾乎所有的WinSock函式呼叫失敗。若你的WinSock函式發生錯誤,那麼請你該好好地檢查你的網絡卡,網絡卡驅動程序和你的WinSock協議核心。

WSAENETUNREACH (10051)無法連上指定的網絡

在柏克萊socket界面中,這個錯誤的意思是無法和對方網絡系統取得聯繫。在WinSock 1。1規格中,WSAENETUNREACH相通於柏克萊socket界面中的ETHOSTUNREACH。

WSAENETRESET (10052)網絡已被重新設定

對方主機出錯而重新開機。在本地主機呼叫和傳送數據有關的函式就會得到這個錯誤。對於setsockopt()函式,這個錯誤發生的原因在於試圖設定SO_KEEPALIVE於逾時(timeout)的連接。

WSAECONNABORTED (10053)中斷連接

在連接建立後,當有某種原因導致TCP/IP協議核心不斷地重送數據,而且都重送失敗的時候,TCP/IP協議將連接中斷。此時,應用程序就會收到WSACONNABORTED這個錯誤。

WSAECONNRESET (10054)連結已被對方重新設定

連結已被對方系統強迫中斷了。TCP/IP協議核心如果偵測出stream socket的連接發生問題的話,它會傳一個表示連接重設(reset)的訊息給對方。此時對方程式會得到WSAECONNRESET的錯誤訊息。

WSAENOBUFS (10055)緩衝區過小

WinSock 核心無法配置足夠的緩衝區,無法執行該程序。這個錯誤的發生和整個Windows 系統資源有關。如果整個Windows本身可用的資源就很少,所能同時執行的程序也少。也有可能是執行了"不良"的應用程序,沒有正常的使用和歸還繫統資源(如內存)。或是某些應用程序的不正常關閉,也會佔用系統資源。

WSAEISCONN (10056) socket已經連接

網絡函式通常會有一定的呼叫順序,有的函式呼叫成功後便不能再呼叫,否則會出現錯誤。當連接建立時,client程序呼叫()成功,而server程序呼叫accept()成功。此時若client程序再呼叫一次connect()函式的話,會得到WSAEISCONN這個錯誤,表示該socket已經處於連接狀態了。如果client程序呼叫listen()函式的話也會出現這個錯誤,表示不應該在此時呼叫這個函式。對於server 程序,如果socket已經處於連接狀態,程序呼叫connect()函式的話,也會得到WSAEISCONN這個錯誤。

上述錯誤是發生在stream socket上,因為stream socket才會建立連接。對於datagram socket,多次成功的connect()函式呼叫是被允許的(對於datdgram socket而言,呼叫connect()函式的目的不在於建立連接)。datagram socket發生此錯誤的原因是在sendto()函式上,當呼叫sendto()傳送datagram時,如果對方地址填入INADDR_ANY(“0.0.0.0”)而port填入0(在sockaddr_in結構中),就會導致WSAEISCONN這個錯誤。

WSAENOTCONN (10057) socket尚未連接

網絡函式通常會有一定的呼叫順序,有些函式必須先呼叫成功某函式才能呼叫。WSAENOTCONN這個錯誤發生的原因很明顯,就是在連接建立之前,你試圖從連接對方取得數據或是傳送數據到對方,就會發生WSAENETCONN這個錯誤。

舉例來說,對於stream socket,如果在建立連結前呼叫send()試圖傳送數據,或者是呼叫recv()試圖取得數據,就會發生這個錯誤,告訴你socket尚未建立連接。你如果呼叫了getpeername()這個函式試圖去取得連接對方的socket,當然也會出現這個錯誤。對於setsockopt()這個函式,如果設定SO_KEEPALIVE,但連接已被中斷的話,也會出現WSAENETCONN這個錯誤。

初學者可能在呼叫connect()函式之後沒有檢查是否函式呼叫錯誤,以致不知道是否連接已正確建立。

WSAESHUTDOWN (10058) socket已經關閉

這個錯誤碼的意思是,無法再傳送數據了,因為socket已經經由shutdown()函式而關閉了。當你利用shutdown()關閉socket之後,WinSock的TCP/IP協議核心就會關閉這個socket的傳送或接收的功能。有一點要注意的是,這個錯誤只會在stream socket出現。

WSAETOOMANYREFS (10059)參照(reference)太多,資源耗盡

在UNIX操作系統中的解釋是指系統核心資源消耗殆盡。不過在WinSock 1.1版的規格書中並沒有任何一個函式會發生這種錯誤。

WSAETIMEDOUT (10060)連接逾時(timeout)

當程序試圖利用connect()連接一台遠程主機時,此主機一直沒有響應,經過了一段時間後,TCP/IP協議核心便會傳回connect() 函式WSAETIMEDOUT這個錯誤訊息。發生這個錯誤的原因可能是程序所要連接的遠程主機的系統發生問題,或者根本沒有這一台主機。也有一種可能的原因是本地機器的網絡系統出現問題,導致本地主機無法正常與遠程主機聯繫。檢查你的網絡系統的設定,看看有什麼不當的地方,如網關器(gateway)的設定,主機名稱表(hosts)內主機名稱和網絡地址的對照有錯誤等等。

WSAECONNREFUSED (10061)連接受拒

連接要求受到對方機器的回絕,無法和對方建立連接。這個錯誤並不是網絡系統出了問題,而是對方機器的server程序拒絕client程序的連接要求,或者是根本沒有這個server程序存在。當TCP/IP核心收到某個連接要求時,會查看系統中是否有某server程序所監聽的port 正好是這個連接要求所要連接的port,如果沒有此server程序,TCP/IP核心會回絕一個WSAECONNREFUSED給對方程式。

通常發生這個錯誤的原因有幾個。使用者可能連接到錯誤的遠程主機或是錯誤的port,也有可能是遠程主機和port對了,但是server程序並沒有執行。檢查看看程序中的sockaddr_in 結構有沒有填錯? sockaddr_in中的IP地址和port是不是以網絡字節順序排列。

WSAELOOP (10062)太多層的符號式鏈接(Symbolic link)

在UNIX操作系統中,這個錯誤的意思是指路徑參考過多的符號式鏈接(symbolic link)。

WSAENAMETOOLONG (10063)檔名過長

在UNIX操作系統,這個錯誤的意思是指欲開啟檔案的路徑名稱(包括文件名稱)太長。

WSAEHOSTDOWN (10064)對方主機關閉

在柏克萊socket接口的解釋中,這個錯誤發生的原因是當遠程主機關閉或系統出問題。

WSAEHOSTUNREACH (10065)無法聯繫對方主機

在柏克萊socket接口中,這個錯誤的意思是無法和對方主機取得聯繫。在WinSock方面,有類似的錯誤代碼,讀者可以參考WSAENETUNREACH這個錯誤的說明。

WSAEPROCLIM (10067) Too many processes.

A Windows Sockets implementation may have a limit on the number of applications that may use it simultaneously. WSAStartup() may fail with this error if the limit has been reached.

WSASYSNOTREADY (10091)主機網絡系統尚未備妥

本地主機的網絡系統尚未能正常運作。若發生這個錯誤,讀者可能要檢查一下有沒有WINSOCK.DLL(或32位版本的WSOCK32.DLL)這個檔案?這個文件存放的路徑正確嗎?

WSA VERNOTSUPPORTED (10092)不支援的WinSock.DLL版本錯誤發生的原因是在呼叫WSAStartup()函式時所指定的WinSock版本不被現有的WinSock版本所支持。若發生這個錯誤,讀者要確定一下本地Windows系統中的WinSock版本和該版本所能支持的版本是如何等等。通常較新的版本同時能支持新舊版本的WinSock,建議讀者能使用較新的WinSock 版本。

WSANOTINITIALISED (10093)未執行WSAStartup()

應用程序沒有呼叫WSAStartup()或是呼叫WSAStartup()失敗。應用程序要成功地呼叫WSAStartup()才能使用WinSock.DLL,否則會有此錯誤訊息出現。

WSAEDISCON (10101) Graceful shutdown in progress.

Returned by WSARecv(), WSARecvFrom() to indicate the remote party has initiated a graceful shutdown sequence.

WSA TYPE_NOT_FOUND (10109) Class type not found

The specified class was not found.

WSAHOST_NOT_FOUND (11001)已經證實找不到主機

當你使用網絡數據函式尋找主機的數據,而該主機不存在時,就會發生這個錯誤。尋找網絡主機數據的方法通常是先尋找本地主機的網絡名稱表(host文件),如果找不到再透過DNS 的途徑去找,如果再找不到,通常就會回給函式這樣的錯誤。

發生這樣的錯誤時,檢查看看本地主機的主機名稱解譯的設定有沒有問題。比較可能出現問題的是DNS的設定,確定是不是設定錯誤的DNS server。如果DNS server正確,確定一下DNS server有沒有跑起來。你可以利用ping這個程序看看DNS server有沒有跑起來,如果沒有ping這個程序,你可以試著去解釋一個確定存在的主機,看看DNS server有沒有在正常運作中。

WSA TRY_AGAIN (11002)找不到網絡數據,但未被證實

這是一個暫時性的錯誤,告訴你目前找不到所要找的網絡數據,你可以再試試看。

WSANO_RECOVERY (11003)無法挽救的錯誤

對於查詢主機名稱而言,這個錯誤發生的原因是由網域名稱系統(Domain Name System, DNS)所出現的錯誤所引起的。這些錯誤包括DNS的FORMERR、REFUSED和NOTIMP等錯誤,詳細請參考RFC1035有關網域名稱系統的文件。

對於查詢服務和協議數據而言,這個錯誤發生的原因是找不到存放網絡數據的數據庫。這個數據庫通常是在本地主機上的檔案,如SERVICES和PROTOCOL這兩個檔。

WSANO_DATA (11004)名稱合法,但查無此數據

查詢格式是正確的,但是查無此數據存在。這通常是暫時性的錯誤,可能在不同的網絡數據服務器中能找到這份數據。

WSAPROVIDERFAILEDINIT (OS dependent) Unable to initialize a service provider.

Either a service provider's DLL could not be loaded (LoadLibrary() failed) or the provider's WSPStartup/NSPStartup function failed.

WSASYSCALLFAILURE (OS dependent) System call failure..

Returned when a system call that should never fail does. For example, if a call to WaitForMultipleObjects() fails or one of the registry APIs fails trying to manipulate the

protocol/namespace catalogs.

WSA_INVALID_HANDLE (OS dependent) Specified event object handle is invalid.

An application attempts to use an event object, but the specified handle is not valid.

WSA_INVALID_PARAMETER (OS dependent) One or more parameters are invalid.

An application used a WinSock function which directly maps to a Win32 function. The Win32 function is indicating a problem with one or more parameters.

WSAINV ALIDPROCTABLE (OS dependent) Invalid procedure table from service provider.

A service provider returned a bogus proc table to WS2_32.DLL. (Usually caused by one or more of the function pointers being NULL.)

WSAINV ALIDPROVIDER (OS dependent) Invalid service provider version number.

A service provider returned a version number other than 2.2.

WSA_IO_INCOMPLETE (OS dependent) Overlapped I/O event object not in signaled state.

The application has tried to determine the status of an overlapped operation which is not yet completed. Applications that use WSAGetOverlappedResult() (with the fWait flag set to false) in a polling mode to determine when an overlapped operation has completed will get this error code until the operation is complete.

WSA_IO_PENDING (OS dependent) Overlapped operations will complete later.

The application has initiated an overlapped operation which cannot be completed immediately. A completion indication will be given at a later time when the operation has been completed.

WSA_NOT_ENOUGH_MEMORY (OS dependent) Insufficient memory available.

An application used a WinSock function which directly maps to a Win32 function. The Win32 function is indicating a lack of required memory resources.

语法分析程序实验报告及代码

LL(1)语法分析实验报告 一、实验题目 LL(1)语法分析 二、实验目的 通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,检查语法错误,进一步掌握常用的语法分析方法。 三、实验内容 构造LL(1)语法分析程序,任意输入一个文法符号串,并判断它是否为文法的一个句子。程序要求为该文法构造预测分析表,并按照预测分析算法对输入串进行语法分析,判别程序是否符合已知的语法规则,如果不符合则输出错误信息。 消除递归前的文法消除递归和提取公因子后的等价文法 S →S ∨ a T | a T | ∨ a T S→aTS’ |vaTS’ T →∧ a T | ∧a S’→vaTS’ |ε T→∧ a T’ T’→∧ aT’ |ε 根据已建立的分析表,对下列输入串:a∧ a∧ a进行语法分析,判断其是否符合文法。 四、实验要求 1.根据已由的文法规则建立LL(1)分析表; 2.输出分析过程。 请输入待分析的字符串: a∧ a∧ a 符号栈输入串所用产生式

#S a∧ a∧ a# #S’Ta a∧ a∧ a# S→aTS’ #S’T ∧ a∧ a# # S’T’a∧∧ a∧ a# T→∧ a T’ # S’T’a a∧ a# # S’T’∧ a# # S’T’a∧∧ a# T’→∧ aT’ # S’ T’a a# # S’ T’# # S’ # T’→ε # # S’→ε 五、程序思路 模块结构: 1、定义部分:定义常量、变量、数据结构。 2、初始化:设立LL(1)分析表、初始化变量空间(包括堆栈、结构体等); 3、运行程序:让程序分析一个text文件,判断输入的字符串是否符合文法定义的规则; 4、利用LL(1)分析算法进行表达式处理:根据LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示简单的错误提示。 六、程序源代码 /* 程序名称: LL(1)文法分析程序 */ /* S->S>aT|aT|>aT */ /* T->

Linux下基于socket的文件传输程序设计课程报告

Linux高级开发 课程设计报告 课程设计题目:Linux下基于socket的文件传输程序设计 学院:________信息工程学院_____________ 专业班级:________网络工程_____________ 年级:________级_____________________ 姓名:____________________________ 学号:________201______________ 完成时间:___2015___年____12___月_____25__日 成绩:__________________________________ 指导教师:____________________________

项目分 值 优秀 (100>x≥90) 良好 (90>x≥80) 中等 (80>x≥70) 及格 (70>x≥60) 不及格 (x<60) 评 分参考标准参考标准参考标准参考标准参考标准 学习态度15 学习态度认 真,科学作风 严谨,严格保 证设计时间并 按任务书中规 定的进度开展 各项工作 学习态度比较 认真,科学作 风良好,能按 期圆满完成任 务书规定的任 务 学习态度 尚好,遵守 组织纪律, 基本保证 设计时间, 按期完成 各项工作 学习态度尚 可,能遵守组 织纪律,能按 期完成任务 学习马虎, 纪律涣散, 工作作风 不严谨,不 能保证设 计时间和 进度 技术水平 与实际能力25 设计合理、理 论分析与计算 正确,实验数 据准确,有很 强的实际动手 能力、经济分 析能力和计算 机应用能力, 文献查阅能力 强、引用合理、 调查调研非常 合理、可信 设计合理、理 论分析与计算 正确,实验数 据比较准确, 有较强的实际 动手能力、经 济分析能力和 计算机应用能 力,文献引用、 调查调研比较 合理、可信 设计合理, 理论分析 与计算基 本正确,实 验数据比 较准确,有 一定的实 际动手能 力,主要文 献引用、调 查调研比 较可信 设计基本合 理,理论分析 与计算无大 错,实验数据 无大错 设计不合 理,理论分 析与计算 有原则错 误,实验数 据不可靠, 实际动手 能力差,文 献引用、调 查调研有 较大的问 题 创新10 有重大改进或 独特见解,有 一定实用价值 有较大改进或 新颖的见解, 实用性尚可 有一定改 进或新的 见解 有一定见解观念陈旧 论文(计算 书、图纸)撰写质量50 结构严谨,逻 辑性强,层次 清晰,语言准 确,文字流畅, 完全符合规范 化要求,书写 工整或用计算 机打印成文; 图纸非常工 整、清晰 结构合理,符 合逻辑,文章 层次分明,语 言准确,文字 流畅,符合规 范化要求,书 写工整或用计 算机打印成 文;图纸工整、 清晰 结构合理, 层次较为 分明,文理 通顺,基本 达到规范 化要求,书 写比较工 整;图纸比 较工整、清 晰 结构基本合 理,逻辑基本 清楚,文字尚 通顺,勉强达 到规范化要 求;图纸比较 工整 内容空泛, 结构混乱, 文字表达 不清,错别 字较多,达 不到规范 化要求;图 纸不工整 或不清晰 指导教师评定成绩: 指导教师签名:年月日

黑莓手机错误代码详解 blackberry系统错误提示

黑莓手机错误代码详解 blackberry系统错误提示 希望国内的黑莓用户对黑莓手机出错提示有个很好的认识,从而来解决问题。 101 Previous startup failed 当jvm启动过程中,前一个启动的项目失败了,设备已经被重置。这个错误表明jvm 在启动时找到“启动进行中”这个标志位已经设置了,当前屏幕信息为:有意停止“系统继续重置”这个死循环,来纠正系统当前不正确的启动操作 102 Invalid code in filesystem 在文件系统中发现无效的代码。手持设备的系统检查.cod文件的变动时,在一些.cod 文件中检测到这个问题。他肯可能是表明生成过程中发生了错误,即在cod文件中存在一个有问题的签名。如果一些用户操作设备导致这个问题的发生,文件系统的代码被破坏,复位的周期将是连续循环的。唯一的恢复方法是擦去设备并且恢复一个新的系统。 103 Cannot find starting address 找不到启动的地址,用于启动系统的引导cod文件找不到。这个错误表明一个用于引导系统的cod文件没有安装到设备上,或者格式不正确。 104 Uncaught: 非预期:《java模块名》jvm诊断出一个非预期的java代码异常错误抛出,程序可以继续执行,或者手持设备可以用桌面管理器连是USB线安装一个程序调试器来查看这些错误信息。事件日志里应该包含了异常错误的信息 105 Example, DbRecSize( %d ) -> %d 举例,DbRecSize( %d ) -> %d文件系统API已经为一种特定的操作返回一种错误状态码,他可能表明在jvm上存在一个无效的或者错误的文件系统 106 Graphics system error 图形系统错误,在设备的图形系统里一个错误发生并被检测到 107 operator new() called 在jvm里,操作new()回调一个c++类,该函数代码没有被正确的从VMRamObject对象来继承,新操作符需要被正确的继承。提取当前的(-后复位)的BUGDISP 108 operator delete() called 在jvm里,操作delete

网众NXP错误代码解析

网众NXP错误代码解析 DDE(1)未知错误 DDE(2)磁盘快照打开模式错误 DDE(3)磁盘已经打开 DDE(4)磁盘文件没有找到 DDE(5)超级工作站文件已经存在 1)还原时发现超级工作站更新文件存在 2)转存时发现超级工作站更新文件存在 DDE(6)超级工作站文件不存在 DDE(7)还原点文件不存在 DDE(8)快照文件大小错误 DDE(9)超级工作站文件大小错误 DDE(10)还原点文件大小错误 DDE(11)错误的文件格式 DDE(12)分区备份文件大小错误 DDE(13)分区备份文件页面大小错误 DDE(14)快照文件索引没有找到,转存文件格式错误 DDE(15)错误的磁盘版本 快照版本和磁盘版本不匹配 1)普通工作站启动 这台工作站设定成了开机不删除工作站文件,然后做过超级工作站更新或者做过工作站转存

2)工作站转存 这台工作站启动过以后,做过超级工作站更新或者在其他工作站上做过工作站转存 3)还原 还原点的版本和磁盘版本不对应 /root/.xfetrash目录太大,占满了磁盘空间 xfe 文件管理器有个特性,可以指定删除文件时放到回收站里,也就是/root/.xfetrash目录, 关闭方法: 桌面-> 文件管理器-> Edit 菜单-> Preference -> Option 选项卡 第一项:Use trash can for file delete (safe delete) 把前面的打勾去掉 清空这个目录: 1)cd /root/.xfetrash rm -fr * 2)打开文件管理器,在Location中输入/root/.xfetrash,然后删除这个目录下面所有的文件 系统错误代码:Linux 0 = 成功

使用Socket实现FTP客户端程序

使用Socket 通信实现FTP 客户端程序 FTP 概述 文件传输协议(FTP)作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。FTP的目标是提高文件的共享性和可靠高效地传送数据。 在传输文件时,FTP 客户端程序先与服务器建立连接,然后向服务器发送命令。服务器收到命令后给予响应,并执行命令。FTP 协议与操作系统无关,任何操作系统上的程序只要符合FTP 协议,就可以相互传输数据。本文主要基于LINUX 平台,对FTP 客户端的实现原理进行详尽的解释并阐述如何使用C 语言编写一个简单的FTP 客户端。 FTP 协议 相比其他协议,如HTTP 协议,FTP 协议要复杂一些。与一般的C/S 应用不同点在于一般的C/S 应用程序一般只会建立一个Socket 连接,这个连接同时处理服务器端和客户端的连接命令和数据传输。而FTP协议中将命令与数据分开传送的方法提高了效率。 FTP 使用2 个端口,一个数据端口和一个命令端口(也叫做控制端口)。这两个端口一般是21 (命令端口)和20 (数据端口)。控制Socket 用来传送命令,数据Socket 是用于传送数据。每一个FTP 命令发送之后,FTP 服务器都会返回一个字符串,其中包括一个响应代码和一些说明信息。其中的返回码主要是用于判断命令是否被成功执行了。 命令端口 一般来说,客户端有一个Socket 用来连接FTP 服务器的相关端口,它负责FTP 命令的发送和接收返回的响应信息。一些操作如“登录”、“改变目录”、“删除文件”,依靠这个连接发送命令就可完成。 数据端口 对于有数据传输的操作,主要是显示目录列表,上传、下载文件,我们需要依靠另一个Socket来完成。 如果使用被动模式,通常服务器端会返回一个端口号。客户端需要用另开一个Socket 来连接这个端口,然后我们可根据操作来发送命令,数据会通过新开的一个端口传输。 如果使用主动模式,通常客户端会发送一个端口号给服务器端,并在这个端口监听。服务器需要连接到客户端开启的这个数据端口,并进行数据的传输。 下面对FTP 的主动模式和被动模式做一个简单的介绍。 主动模式(PORT)

Windows常见错误代码解析

Windows常见错误代码解析 Windows常见非法操作详解 ■.停止错误编号:0x0000000A 说明文字RQL-NOT-LESS-OR-EQUAL 通常的原因:驱动程序使用了不正确的内存地址. 解决方法:如果无法登陆,则重新启动计算机.当出现可用的作系统列表时,按F8键.在Windows高级选项菜单屏幕上,选择"最后一次正确的配置",然后按回车键. 检查是否正确安装了所有的新硬件或软件.如果这是一次全新安装,请与硬件或软件的制造商联系,获得可能需要的任何Windows更新或驱动程序. 运行由计算机制造商提供的所有的系统诊断软件,尤其是内存检查. 禁用或卸掉新近安装的硬件(RAM,适配器,硬盘,调制解调器等等),驱动程序或软件. 确保硬件设备驱动程序和系统BIOS都是最新的版本. 确保制造商可帮助你是否具有最新版本,也可帮助你获得这些硬件. 禁用 BIOS内存选项,例如cache或shadow. ■.停止错误编号:0x0000001E 说明文字:KMODE-EXPTION-NOT-HANDLED 通常的原因:内核模式进程试图执行一个非法或未知的处理器指令. 解决方法:确保有足够的空间,尤其是在执行一次新安装的时候. 如果停止错误消息指出了某个特定的驱动程序,那么禁用他.如果无法启动计算机.应试着用安全模式启动,以便删除或禁用该驱动程序. 如果有非 Microsoft支持的视频驱动程序,尽量切换到标准的VGA驱动程序或Windows提

供的适当驱动程序. 禁用所有新近安装的驱动程序. 确保有最新版本的系统BIOS.硬件制造商可帮助确定你是否具有最新版本,也可 以帮助你获得他. BIOS内存选项,例如cache,shadow. ■.停止错误编号:0x00000023或0x00000024 说明文字:FAT-FILE-SYSTEM或MTFS-FILE-SYSTEM 通常原因:问题出现在Ntfs.sys(允许系统读写NTFS驱动器的驱动程序文件)内. 解决方法:运行由计算机制造商提供的系统诊断软件,尤其是硬件诊断软件. 禁用或卸载所有的反病毒软件,磁盘碎片整理程序或备份程序. 通过在命令提示符下运行Chkdsk /f命令检查硬盘驱动器是否损坏,然后重新启动计算机. ■.停止编号:0x0000002E 说明文字ATA-BUS-ERROR 通常的原因:系统内存奇偶校验出错,通常由硬件问题导致. 解决方法:卸掉所有新近安装的硬件(RAM.适配器.硬盘.调制解调器等等). 运行由计算机制造商提供的系统诊断软件,尤其是硬件诊断软件. 确保硬件设备驱动程序和系统BIOS都是最新版本. 使用硬件供应商提供的系统诊断,运行内存检查来查找故障或不匹配的内存. 禁用BIOS内存选项,例如cache或shadow. 在启动后出现可用作系统列表时,按F8.在Windows高级选项菜单屏幕上,选择" 启动VGA模式:.然后按回车键.如果这样做还不能解决问题,可能需要更换不同 的视频适配器列表,有关支持的视频适配器列表,请参阅硬件兼容性列表. ■.停止编号:0x0000003F

java中异步socket类的实现和源代码

java中异步socket类的实现和源代码 作者:dozb 我们知道,java中socket类一般操作都是同步进行,常常在read的时候socket就会阻塞直到有数据可读或socket连接断开的时候才返回,虽然可以设置超时返回,但是这样比较低效,需要做一个循环来不停扫描数据是否可读。看来,在同一个线程中,要是想实现异步读写不太容易。 下面介绍的这个类实现了伪异步socket通讯。基本思想就是在现有socket类的基础上进行封装,当sock et连接建立成功后,立即创建一个socket数据接收线程,专门负责阻塞式的socket读取(read),而当前线程负责数据的发送(send)。另外定义了一个接口,包括了socket的各种事件的回调。我们要实现这个接口,在接口实现类中创建异步socket对象,并且传递接口类到异步socket对象中,目的是有socket事件的时候回调我们的方法。 下面是接口: SocketExHandler.java package https://www.360docs.net/doc/772539678.html,; import https://www.360docs.net/doc/772539678.html,.*; /** * Title: * Description: * Copyright: Copyright (c) 2001 * Company: https://www.360docs.net/doc/772539678.html, * @author dozb * @version 1.0 */ /** * 异步Socket Client Interface * 使用方法: * 1.定义类 MySocketClientEx 实现SocketExHandler接口,实现 OnReceive OnClose OnConnect 事件 * 2.在类中实现start方法 MySocketEx = new SocketEx(this,ip,port)

debug灯常见的错误代码含义如下

常见的错误代码含义如下: 1、“C1”内存读写测试,如果内存没有插上,或者频率太高,会被BIOS认为没有内存条,那么POST就会停留在“C1”处。 2、“0D”表示显卡没有插好或者没有显卡,此时,蜂鸣器也会发出嘟嘟声。 3、“2B”测试磁盘驱动器,软驱或硬盘控制器出现问题,都会显示“2B”。 4、“FF”表示对所有配件的一切检测都通过了。但如果一开机就显示“FF”,这并不表示系统正常,而是主板的BIOS出现了故障。导致的原因可能有:CPU没插好,CPU核心电压没调好、CPU频率过高、主板有问题等。 实战DEBUG灯——Award BIOS篇] DEBUG灯的使用也很简单,下面针对几种常见的故障代码和大家讨论一下解决问题的方法。需说明的是,目前市场上的主板绝大部分使用的是AWARD BIOS或AMI BIOS,由于目前DEBUG 灯实际上是调用了主板BIOS的自检过程,所以主板BIOS程序的不同,DEBUG灯显示的代码也不同,解决问题的方法也不可一概而论。因此我们也将分两个部分讨论。 以下的说明中将选择最常见的故障代码及解决方法,至于其他更详细的代码含义,请读者参考DEBUG灯的说明手册。 1. Award BIOS篇 错误代码:00(FF) 代码含义:主板没有正常自检 解决方法:这种故障较麻烦,原因可能是主板或CPU没有正常工作。一般遇到这种情况,可首先将电脑上除CPU外的所有部件全部取下,并检查主板电压、倍频和外频设置是否正确,然后再对CMOS进行放电处理,再开机检测故障是否排除。如故障依旧,还可将CPU从主板上的插座上取下,仔细清理插座及其周围的灰尘,然后再将CPU安装好,并加以一定的压力,保证CPU与插座接触紧密,再将散热片安装妥当,然后开机测试。如果故障依旧,则建议更换CPU测试。另外,主板BIOS损坏也可造成这种现象,必要时可刷新主板BIOS后再试。

在Linux下基于TCP协议的文件传输程序

Linux下基于TCP/IP协议的文件传输程序 【设计目的】 通过Linux C编程,设计一个基于TCP/IP的文件传输系统,实现网络文件的收发 【设计环境】 Ubuntu 12.04 【设计方案】 (1)文件读写 任意文件都可以二进制的方式进行读写,为了实现任意文件类型的传输,在读写文件的过程中,必须采用二进制的读写方式。 (2)传输协议 为了保证数据的正确性,文件传输需要采用一种可靠的传输协议。UDP协议实现比较简单,但UDP面向无连接,传输过程中,会出现丢包的情况,导致数据发送失败。故采用面向连接的TCP/IP协议,防止传输过程中的数据丢失的情况。 (3)大文件的传输 对于比较大的文件,应该进行分包操作,以防止占用过多的内存,导致文件发送失败。【设计流程】 如图1所示,服务器程序作为文件的发送方。首先,服务器端输入要发送的文件。然后,创建一个流式套接字(SOCK_STREAM),进行绑定。绑定成功后,执行监听,当有客户发送连接请求,执行Accept(),接收来自客户端的请求。 连接建立后,首先服务器向客服端发送的文件的文件名及扩展名等信息。信息发送完毕,服务器方将待发送的数据读入缓冲区,通过套接字将数据发送出去。发送完成后退出,并显示发送完成的信息。

图1 服务器流程图 如图2所示,客户端程序完成文件的接收操作。首先,创建一个流式套接字。套接字创建成功后,对该套接字进行绑定。绑定成功后,向服务器方发送连接请求。连接成功后,首先,接收服务器发送的文件信息。接收成功后,开始数据的接收。文件接收完毕,显示文件已接收完成。

图2 客户端流程图 【设计测试】 了验证设计的正确性,在Ubuntu 12.04系统上对可执行文件进行了回环测试。步骤如下: (1)测试文件a.txt及服务器端文件源fileserver.c和可执行文件fileserver

Socket编程协议错误代码解析

10004—WSAEINTR 函数调用中断。该错误表明由于对WSACancelBlockingCall的调用,造成了一次调用被强行中断。 10009—WSAEBADF 文件句柄错误。该错误表明提供的文件句柄无效。在MicrosoftWindowsCE下,socket函数可能返回这个错误,表明共享串口处于“忙”状态。 10013—WSAEACCES 权限被拒。尝试对套接字进行操作,但被禁止。若试图在sendto或WSASendTo中使用一个广播地址,但是尚未用setsockopt和SO_BROADCAST这两个选项设置广播权限,便会产生这类错误。 10014—WSAEFAULT 地址无效。传给Winsock函数的指针地址无效。若指定的缓冲区太小,也会产生这个错误。10022—WSAEINV AL 参数无效。指定了一个无效参数。例如,假如为WSAIoctl调用指定了一个无效控制代码,便会产生这个错误。另外,它也可能表明套接字当前的状态有错,例如在一个目前没有监听的套接字上调用accept或WSAAccept。 10024—WSAEMFILE 打开文件过多。提示打开的套接字太多了。通常,Microsoft提供者只受到系统内可用资源数量的限制。 10035—WSAEWOULDBLOCK 资源暂时不可用。对非锁定套接字来说,如果请求操作不能立即执行的话,通常会返回这个错误。比如说,在一个非暂停套接字上调用connect,就会返回这个错误。因为连接请求不能立即执行。 10036—WSAEINPROGRESS 操作正在进行中。当前正在执行非锁定操作。一般来说不会出现这个错误,除非正在开发16位Winsock应用程序。 10037—WSAEALREADY 操作已完成。一般来说,在非锁定套接字上尝试已处于进程中的操作时,会产生这个错误。比如,在一个已处于连接进程的非锁定套接字上,再一次调用connect或WSAConnect。另外,服务提供者处于执行回调函数(针对支持回调例程的Winsock函数)的进程中时,也会出现这个错误。 10038—WSAENOTSOCK 无效套接字上的套接字操作。任何一个把SOCKET句柄当作参数的Winsock函数都会返回这个错误。它表明提供的套接字句柄无效。 10039—WSAEDESTADDRREQ 需要目标地址。这个错误表明没有提供具体地址。比方说,假如在调用sendto时,将目标地址设为INADDR_ANY(任意地址),便会返回这个错误。 10040—WSAEMSGSIZE 消息过长。这个错误的含义很多。如果在一个数据报套接字上发送一条消息,这条消息对内部缓冲区而言太大的话,就会产生这个错误。再比如,由于网络本身的限制,使一条消息过长,也会产生这个错误。最后,如果收到数据报之后,缓冲区太小,不能接收消息时,也会产生这个错误。 10041—WSAEPROTOTYPE 套接字协议类型有误。在socket或WSASocket调用中指定的协议不支持指定的套接字类型。

文件传输程序设计讲解

Internet网络程序设计实验报告基于Socket的文件传输程序设计 姓名:莫敌 班级:软件 0904 学号:U200917895 指导老师:陆永忠 2012.03.31

目录 1 实验目的及要求 (3) 1.1 实验目的 (3) 1.2 实验要求 (3) 2 实验环境 (3) 3 实验程序设计 (3) 3.1 设计思想 (3) 3.2 程序设计流程框图 (4) 3.3 详细设计 (5) 3.3.1 界面设计 (5) 3.3.2 主要功能实现 (6) 3.4 运行结果 (9) 4 实验感想 (11)

1实验目的及要求 1.1实验目的 熟悉Socket的通讯机制,了解网络程序的设计方法。重点掌握基于TCP协议的Socket 网络编程。 1.2实验要求 设计界面,在服务器端和客户端传输图片和文件。如果是图片请显示该图片,如果是其他文件,则保存。 2实验环境 编译环境:Windows 7 + Visual Studio 2010 使用MFC编写。 运行环境:Windows 7操作系统。 3实验程序设计 3.1设计思想 根据实验的要求:在服务器和客户端之间传输文件和图片,则需要程序提供一种可靠的网络传输服务来保证文件在传输过程中无丢失、损坏。在分析了传输层协议TCP协议和UDP 协议后,了解到TCP协议提供的是一种面向连接的、可靠的字节流服务,而UDP协议提供的是一种无连接的、不可靠的数据报服务。由于程序的需求,即必须保证文件传输的可靠性,于是,我采用基于TCP协议的Windows sockets来设计实现本实验。

3.2程序设计流程框图 图1程序设计流程框图

Windows事件查看器事件代码详解

0 操作成功完成。 1 函数不正确。 2 系统找不到指定的文件。 3 系统找不到指定的路径。 4 系统无法打开文件。 5 拒绝访问。 6 句柄无效。 7 存储控制块被损坏。 8 存储空间不足,无法处理此命令。 9 存储控制块地址无效。 10 环境不正确。 11 试图加载格式不正确的程序。 12 访问码无效。 13 数据无效。 14 存储空间不足,无法完成此操作。 15 系统找不到指定的驱动器。 16 无法删除目录。 17 系统无法将文件移到不同的驱动器。 18 没有更多文件。 19 介质受写入保护。 20 系统找不到指定的设备。 21 设备未就绪。 22 设备不识别此命令。 23 数据错误(循环冗余检查)。 24 程序发出命令,但命令长度不正确。 25 驱动器找不到磁盘上特定区域或磁道。 26 无法访问指定的磁盘或软盘。 27 驱动器找不到请求的扇区。 28 打印机缺纸。 29 系统无法写入指定的设备。 30 系统无法从指定的设备上读取。 31 连到系统上的设备没有发挥作用。 32 另一个程序正在使用此文件,进程无法访问。 33 另一个程序已锁定文件的一部分,进程无法访问。 36 用来共享的打开文件过多。 38 已到文件结尾。 39 磁盘已满。 50 不支持请求。 51 Windows 无法找到网络路径。请确认网络路径正确并且目标计算机不忙或已关闭。如果 Windows 仍然无法找到网络路径,请与网络管理员联系。 52 由于网络上有重名,没有连接。请到“控制面板”中的“系统”更改计算机名,然后重试。 53 找不到网络路径。 54 网络很忙。

55 指定的网络资源或设备不再可用。 56 已达到网络 BIOS 命令限制。 57 网络适配器硬件出错。 58 指定的服务器无法运行请求的操作。 59 出现了意外的网络错误。 60 远程适配器不兼容。 61 打印机队列已满。 62 服务器上没有储存等待打印的文件的空间。 63 已删除等候打印的文件。 64 指定的网络名不再可用。 65 拒绝网络访问。 66 网络资源类型不对。 67 找不到网络名。 68 超出本地计算机网络适配器卡的名称限制。 69 超出了网络 BIOS 会话限制。 70 远程服务器已暂停,或正在启动过程中。 71 已达到计算机的连接数最大值,无法再同此远程计算机连接。 72 已暂停指定的打印机或磁盘设备。 80 文件存在。 82 无法创建目录或文件。 83 INT 24 上的故障。 84 无法取得处理此请求的存储空间。 85 本地设备名已在使用中。 86 指定的网络密码不正确。 87 参数不正确。 88 网络上发生写入错误。 89 系统无法在此时启动另一个进程。 100 无法创建另一个系统信号灯。 101 另一个进程拥有独占的信号灯。 102 已设置信号灯,无法关闭。 103 无法再设置信号灯。 104 无法在中断时请求独占的信号灯。 105 此信号灯的前一个所有权已结束。 107 由于没有插入另一个软盘,程序停止。 108 磁盘在使用中,或被另一个进程锁定。 109 管道已结束。 110 系统无法打开指定的设备或文件。 111 文件名太长。 112 磁盘空间不足。 113 没有更多的内部文件标识符。 114 目标内部文件标识符不正确。 117 应用程序发出的 IOCTL 调用不正确。 118 验证写入的切换参数值不正确。 119 系统不支持请求的命令。

基于Java远程传输文件Tcp 详细(源码+jar+exe)

发送端 /*2011 *by小郭 *远程文件传输 **/ import javax.swing.*; import https://www.360docs.net/doc/772539678.html,.*; import java.io.*; import java.awt.*; import https://www.360docs.net/doc/772539678.html,ng.*; import java.awt.event.*; public class TcpSend extends JFrame implements ActionListener { private JButton button; private JFileChooser chooser; //private FileInputStream in; //private String filename; //byte[] by=new byte[100000]; public TcpSend() { super("小郭文件传输发送端"); this.setBounds(10,10,400,400); this.setLayout(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(false); this.setVisible(true); chooser=new JFileChooser(); button=new JButton("发送"); button.setFont(new Font("楷体",Font.PLAIN,30)); button.setBounds(0,0,400,400); add(button); button.addActionListener(this); } public void actionPerformed(ActionEvent e) { chooser.showOpenDialog(this);

Runtime错误解释分析

Runtime错误解释分析 Runtime是运行时的意思,Runtime Error就是运行时错误,就是在运行期间出现的错误。 An error that occurs during the execution of a program. In contrast, compile-time errors occur while a program is being compiled. Runtime errors indicate bugs in the program or problems that the designers had anticipated but could do nothing about. For example, running out of memory will often cause a runtime error.(运行时错误是程序执行期间发生的错误,它不同于编译期间发生的错误.运行时错误可能是程序中的毛病引起的,也可能程序并无错误,例如机器存储器不够引起) Note that runtime errors differ from bombs or crashes in that you can often recover gracefully from a runtime error.(运行时错误不同于炸弹或系统垮掉,运行时错误一般不影响操作系统运行) 具体的运行错误,要参照错误信息,分析后,想办法解决. RUNTIME ERROR SSS AT III:MMM 其中,SSS是运行错误代码,III是错误发生的程序段,MMM是错误地址。 DOS 错误代码: 1 无效DoS功能号 2 文件末找到 3 路径未找到 4 打开文件过多 5 禁止文件存取 6 无效文件句柄 12 无效文件存取代码 15 无效驱动器号

Linux下基于socket的文件传输程序设计讲解

课程设计 课程名称Linux下基于socket的文件传输程序设计学生学院信息工程学院 专业班级 学号 学生姓名 指导教师 2013 年12月27日

引言 在互联网已经基本普及的情况下,人们越来越依赖于信息网络。因为互联网的使用,我们可以大大的节省了我们的时间及成本。所以文件、信息的传输已经是人们生活中不可缺少的东西。而现在主流的应用软件都是基于WINDOWS平台上开发运行的。 Linux操作系统本身具有非常高的安全性,不易感染病毒(这是WINDOWS系统所不能比拟的),而且可移植性强,应用于大多数的服务器。所以我们应该多开发出适合人们使用的应用软件,使得Linux更加好的为广大网民使用以保障自身的安全性。 本课设主要介绍在Linux下的文件传输原理及功能,虽然不能与主流传输软件的功能相比,但是却是占用的资源比它要少

·1课设背景分析 这次课程设计的要求是在以Linux为内核的操作系统下,实现多线程文件传输系统功能模块。系统模块分为服务器和客户端两部分,客户端实现对文件的上传、下载和查看服务器默认路径下的文件列表;服务器可以对文件进行管理操作,包括创建、删除和重命名等。 多线程文件传输是一种一对多或者多对多的关系,一般是一个服务器对应着多个客户端。客户端通过socket连接服务器,服务器要为客户端创建一个单独进程(线程)监听每个客户端的请求。 创建好连接之后文件就可以通过流的形式传输。linux内核中为我们提供了两种不同形式的读写流,包括read()、write()和send()、recv()。客户机对文件的查看指令也是通过流传递给服务器,服务器根据请求类型返回不同相应流。 根据socket原理和特点绘画出链接流程图,将客户机与服务器的相互通信划分为不同的模块,每个模块负责独立的功能项。服务器输入指令管理目录下的文件,create filename是创建文件命令,rename oldname newname是删除文命令,delete filename 是删除文件命令,同时监听着客户端的请求;客户端向服务器发送上传、下载和查看请求,从而得到不同的相应,包括将文件下载到当前路径下,从当前路径下上传文件给服务器,列出服务器的文件列表。 ·2网络通信原理及socket简介 2.1网络通信原理(TCP) 国际标准化组织(ISO)在1978年提出开放系统互连参考模型(OSI:open system interconnection reference mode),该模型是设计和描述网络通信的基本框架。OSI采用分层的额结构化技术将通信网络分为7层,从低到高为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP参考模型是由美国国防部创建,且发展至今最成功的通信协议模型,与OSI模型对应,它将网络功能分为4层,包括网络接口层、网络层、传输层和应用层,每一层都有对应的协议。在传输层的主要协议是TCP协议和UDP协议。socket连接就是基于TCP协议。TCP是一种可靠地数据传输协议。 它为应用程序提供可靠的通信连接。适合于一次传输大批数据的情况。并适用于要求得到响应的应用程序并通过3次握手。 其数据包头格式为: SYN J SYN K, ACK J+1 ACK K+1

系统错误提示代码解析

系统错误提示代码解析: 0 0x0000 操作成功完成。 1 0x0001 函数不正确。 2 0x0002 系统找不到指定的文件。 3 0x0003 系统找不到指定的路径。 4 0x0004 系统无法打开文件。 5 0x0005 拒绝访问。 6 0x0006 句柄无效。 7 0x0007 存储控制块被损坏。 8 0x0008 存储空间不足,无法处理此命令。 9 0x0009 存储控制块地址无效。 10 0x000A 环境不正确。 11 0x000B 试图加载格式不正确的程序。 12 0x000C 访问码无效。 13 0x000D 数据无效。 14 0x000E 存储空间不足,无法完成此操作。 15 0x000F 系统找不到指定的驱动器。 16 0x0010 无法删除目录。 17 0x0011 系统无法将文件移到不同的驱动器。 18 0x0012 没有更多文件。 19 0x0013 媒体受写入保护。 20 0x0014 系统找不到指定的设备。 21 0x0015 设备未就绪。 22 0x0016 设备不识别此命令。 23 0x0017 数据错误(循环冗余检查)。 24 0x0018 程序发出命令,但命令长度不正确。 25 0x0019 驱动器找不到磁盘上特定区域或磁道。 26 0x001A 无法访问指定的磁盘或软盘。 27 0x001B 驱动器找不到请求的扇区。 28 0x001C 打印机缺纸。 29 0x001D 系统无法写入指定的设备。 30 0x001E 系统无法从指定的设备上读取。 31 0x001F 连到系统上的设备没有发挥作用。 32 0x0020 另一个程序正在使用此文件,进程无法访问。 33 0x0021 另一个程序已锁定文件的一部分,进程无法访问。 34 0x0022 驱动器中的软盘不对。将%2 插入(卷序列号: %3)驱动器%1。 36 0x0024 用来共享的打开文件过多。 38 0x0026 已到文件结尾。 39 0x0027 磁盘已满。 50 0x0032 不支持请求。 51 0x0033 Windows 无法找到网络路径。请确认网络路径正确并且目标计算机不忙或已关闭。如果Windows 仍然无法找到网络路径,请与网络管理员联系。 52 0x0034 由于网络上有重名,没有连接。请到“控制面板”中的“系统”更改计算机名,

常见错误代码及解决方法

常见错误代码及解决方法 在用户申报宽带故障时,拨号错误通常有个数字提示出错。通常,6开头错误一般都是与服务器之间通讯有问题,这个很麻烦也很不好解决,691/619除外这个是账号问题,7开头错误一般都是网卡问题,这个好解决,718/738除外这个是PPPOE服务器故障,尤其是769错误,是网卡禁用。如果出现其他7开头错误。可以查看网卡工作状态以及协议是否齐全

错误代码解决方式 678 工作人员上门 1.个别用户:需询问用户几台电脑如果用户是多台电脑使用路由器连接请用户将主网线连接一台电脑查看错误代码 2.大面积用户:如果小区或者楼道设备箱停电会出现大面积678的现象 691 客服电话解决 1.宽带连接用户名和密码输入错误请用户重新输入用户名和密码或者重新建立宽带连接重新输入 2.此用户账号欠费停机可以在开户系统查询该账号状态 769客服电话解决 本地网卡问题网上邻居右键属性里本地连接是禁用状态才显示769 双击本地连接启用即可如果没有本地连接显示是网卡驱动掉了或者是网卡坏了这是用户电脑问题与宽带公司无关 738 PPPOE服务器不能分配IP地址服务器故障,用户太多超过服务器所能提供的IP地址 815 工作人员上门 Vista系统中显示该错误代码与678操作一致 651 工作人员上门 W7系统中显示该错误代码与678操作一致

619 客服电话解决 宽带连接服务器超时请用户电脑重启或者重新连接宽带如果真有网络问题会显示678 实在连接不上再派工作人员上门 718 问题:验证用户名时远程计算机超时没有响应,断开连接 PPPOE 服务器故障 备注说明 619 734 720 此类错误代码出现时,如果是个别用户,则请用户重新启动电脑重新连接宽带即可。如果是大面积用户反映此代码,一般多为网络问题,需与公司网管及时联系,查看服务器 宽带连接建立方法:XP系统创建拨号连接方法 1网上邻居右键属性///或者--开始菜单—控制面板---左键单击:网络邻居 2.点击页面左上角“创建一个新的连接” 开始菜单-----选择:控制面板

c语言SOCKET编程指南

介绍 Socket 编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用connect() 前的bind() 的结构而不知所措?等等… 好在我已经将这些事完成了,我将和所有人共享我的知识了。如果你了解 C 语言并想穿过网络编程的沼泽,那么你来对地方了。-------------------------------------------------------------------------------- 读者对象 这个文档是一个指南,而不是参考书。如果你刚开始socket 编程并想找一本入门书,那么你是我的读者。但这不是一本完全的socket 编程书。 -------------------------------------------------------------------------------- 平台和编译器 这篇文档中的大多数代码都在Linux 平台PC 上用GNU 的gcc 成功编译过。而且它们在HPUX平台上用gcc 也成功编译过。但是注意,并不是每个代码片段都独立测试过。 --------------------------------------------------------------------------------

目录: 1) 什么是套接字? 2) Internet 套接字的两种类型 3) 网络理论 4) 结构体 5) 本机转换 6) IP 地址和如何处理它们 7) socket()函数 8) bind()函数 9) connect()函数 10) listen()函数 11) accept()函数 12) send()和recv()函数 13) sendto()和recvfrom()函数 14) close()和shutdown()函数 15) getpeername()函数 16) gethostname()函数 17) 域名服务(DNS) 18) 客户-服务器背景知识 19) 简单的服务器 20) 简单的客户端 21) 数据报套接字Socket

常见错误代码及解决办法

常见错误代码及解决办法 错误 691,客户名密码错,错误提示如图所示: 1)输入的上网帐号(上网客户名)或密码填写错误导致,首先请找出客户的客户名和密码,核对一下,重新再输入一次。依然不行,在电脑右下角找到本地连接的图标-右击,在最下面一排会出现打开网络连接等类似字样(VISTA WIN7也一样,可能文字描述会有一点点不同而 已),打开后的界面里同样会有一个移动宽带连接的图标,双击打开如下图: 按照上图设置完成后,检查帐号是否正确,然后重新输入密码连接。 如果仍然连接不上,且错误代码仍为691,可能是用户宽带欠费(江大移动网基本都是手机帐号,如果手机欠费,宽带也等同于欠费),请续费后再试。也可能是用户密码的确是错误了,这时候 用户可拨打10086进行重置密码,具体操作如下:拨打10086,根据语音提示拨通人工服务,接 通后跟客服人员说“我要重置(即初始化宽带密码)个人有线宽带的密码,帮我转接到宽带专 席(即宽带专家坐席)好么”,转接到宽带专席之后,跟宽带专席的客服人员说“我要重置个 人有线宽带的密码”……重置完了之后,跟客服人员说“再帮我把宽带帐号的端口刷新一下”, 说完就可以跟客服说声谢谢然后再见了。然后重新输入重置之后的密码(一般为123456,偶尔 会有123123),再进行连接。 错误800

1.关掉防火墙,杀毒软件等程序,再进行连接(可以关一个就连接一次,这样可以找出是哪个防火墙的问题) 2.检查本地连接以及IP和DNS设置:在电脑右下角找到本地连接的图标(找不到图标的话,XP系统:开始-控制面板(切换到经典模式)-网络连接;VISTA系统:开始-控制面板-网 络和INTERNET(没有这个选项的跳过这个直接往下看)-网络和共享中心-管理网络连接(在 界面的左侧);WIN7系统:开始-控制面板-网络和INTERNET(没有这个选项的跳过这个直 接往下看)-网络和共享中心-更改适配器设置(在界面的左侧))-右击,在最下面一排会 出现打开网络连接等类似字样(VISTA WIN7也一样,可能文字描述会有一点点不同而已), 在打开的界面里会有本地连接的图标,看本地连接的图标是否正常(正常的显示是:XP系 统会显示已连接上,VISTA和WIN7会显示网络或网络2、网络3……)。 a.正常的话右击本地连接,点击属性,在中间的位置会有一个小窗口,有很多列表,XP 系统找到“Internet选项TCP/IP协议”并双击打开,VISTA和WIN7找到一个含有“Ipv4” 的选项并双击打开,将其中IP和DNS都设置为自动获取。然后点击确定,然后点击此 界面里的移动宽带连接,按照“错误691”的解决方案设置好,然后重新输入密码并 连接。 b.本地连接不正常的话,查看本地连接上的文字提示。 1)本地连接上提示本地连接被停用的话,右击本地连接-启用,即可 2)本地连接上有个红色的叉叉,提示网络电缆被拔出。这说明你的网络线路有问题, 简单点说就是你的网线压根没插好,也有可能是接口坏掉了,可以把网线插拔试试, 红色叉叉消失了,就说明网线插好了。实在不行换跟网线或换个接口。 3)本地连接上有叹号,提示网络连接受限制或无连接。 ①XP系统:右击-修复 ②VISTA和WIN7系统:右击-诊断等待获取完网络地址。 没有叹号了的话,尝试进行连接 叹号仍然存在的话:右击本地连接-停用(禁用),然后再右击本地连接-启用, 等待获取完网络地址。没有叹号了的话,尝试进行连接 叹号仍然存在的话:右击本地连接-属性,中间有个小窗口有很多选项,取消所有 选项的前面的勾,点击确定。然后,右击本地连接-属性,中间有个小窗口有很多 选项,勾选所有选项的前面的勾,点击确定。等待获取完网络地址。 没有叹号了的话,尝试进行连接 叹号仍然存在的话,重复以上步骤,如果一直都有叹号,并且无法连接上移动宽 带,说明计算机本身驱动有存在问题,或网卡问题(此处驱动原因的可能性远远 大于网卡原因的可能性) 3.卸载已经安装的宽带连接软件,并重新安装,安装完成后要重新启动(必须),然后进行网络连接。 错误868(和错误800有些类似) 找到本地连接,点击开始,打开控制面板,XP系统:开始-控制面板(切换到经典模式)-网络连接;VISTA 系统:开始-控制面板-网络和INTERNET(没有这个选项的跳过这个直接往下看)-网络和共享中心-管理网络连接(在界面的左侧);WIN7系统:开始-控制面板-网络和INTERNET(没有这个选项的跳过这个直接往下看)-网络和共享中心-更改适配器设置(在界面的左侧)。

相关文档
最新文档