1. 怎樣判斷socket連接成功
socket建立連接失敗會拋出異常,你只需要在catch里捕捉異常就可以了catch(exceptione){System.out.println("伺服器/客戶端未連接");return;}
2. 常見Socket連接錯誤及原因有哪些
socketerrorcode:11001,socketerrorinfo:不知道這樣的主機。 表示您的計算機無法連上伺服器,請檢查您的Proxy設定以及Proxy相關賬號,或暫時取消您防毒軟體的「個人防火牆」。 2、出現網路聯機錯誤Socketerror#11004 socketerrorcode:11004,socketerrorinfo:請求的名稱有效,但是找不到請求的類型的數據。 應該是網路聯機狀態問題,請用戶檢查網路聯機是否正常。 3、出現網路聯機錯誤Socketerror#10060 Connection Timed Out socketerrorcode:10060,socketerrorinfo:由於連接方在一段時間後沒有正確答復或連接的主機沒有反應,連接嘗試失敗。 表示您與伺服器發生聯機逾時錯誤,請檢查您的Proxy相關設定,以及Proxy Server是否已將SSL 443 port打開。 4、出現網路聯機錯誤Socketerror#10061 socketerrorcode:10061,socketerrorinfo:由於目標計算機積極拒絕,無法連接。
3. windows socket 客戶端怎麼判斷服務端已關閉
伺服器端發起關閉,要讓伺服器發送RST而不是FIN,
這時客戶端收到RST後send會直接返回失敗(這時就檢測出伺服器已關閉)而不是阻塞。
如果直接調用closesocket會發送FIN,
需要設置linger使closesocket直接發送RST
代碼:
SOCKET
soc_client
=
::accept(soc_listen,
(struct
sockaddr
*)&client_addr,
&len);
…
struct
linger
so_linger;
so_linger.l_onoff
=
1;
so_linger.l_linger
=
0;
setsockopt(soc_client,
SOL_SOCKET,
SO_LINGER,
(char
*)&so_linger,
sizeof(so_linger));
4. c#socket編程怎麼判讀客戶端與伺服器斷開連接
使用Socket類中的Poll方法,就可以。
Socket client //假如已經創建好了,連接到伺服器端得Socket的客戶端對象。
我們只要client.Poll(10,SelectMode.SelectRead)判斷就行了。只要返回True是。就可以認為客戶端已經斷開了。
Poll 方法將會檢查 Socket 的狀態。指定 selectMode 參數的 SelectMode..::.SelectRead,可確定 Socket 是否為可讀。指定 SelectMode..::.SelectWrite,可確定 Socket 是否為可寫。使用 SelectMode..::.SelectError 檢測錯誤條件。Poll 將在指定的時段(以 microseconds 為單位)內阻止執行。如果希望無限期的等待響應,則將 microSeconds 設置為一個負整數。如果要檢查多個套接字的狀態,則不妨使用 Select 方法。
5. C++中怎麼判斷SOCKET的連接狀態
你進行recv或者send操作時會報錯的,在遠端關閉時,你這邊是可以通過select獲取到事件的/或者加心跳機制來保證連通性
6. vb.net socket怎麼判斷客戶端和伺服器的連接斷開了 thank you!
tcp
還是
udp?
tcp
的話
try
-
catch
就行了,因為
tcp
要求的是穩定的連接,連接一斷開直接就
throw
exception
了。
udp
的話,因為它本身是無連接的協議,所以其實不存在斷開不斷開的,准確的說應該是超時。可以客戶端每隔一段時間向服務端發送個心跳包(隨便什麼數據都行,只是證明客戶端還在線),服務端每隔一段時間檢測在線的客戶端列表,誰已經很久沒發來心跳包了就證明它掉線了。
7. 常見Socket連接錯誤及原因有哪些
表示您的計算機無法連上伺服器,請檢查您的Proxy設定以及Proxy相關賬號,或暫時取消您防毒軟體的「個人防火牆」。
8. vb.net中關於 socket的連接伺服器失敗問題! 怎麼處理連接失敗
用 try-catch 結構,捕獲 SocketException,示例:
Try
//可能產生錯誤的代碼
CatchexAsSocketException
MessageBox.Show("連接失敗,原因是:"&ex.Message)
EndTry
P.S. 好久不寫 VB.NET 的了,這個是根據 C# 和記憶中的樣子寫的,題主看明白思路就好。
9. 如何判斷socket客戶端和伺服器端
法一:
當recv()返回值小於等於0時,socket連接斷開。但是還需要判斷 errno是否等於 EINTR,如果errno == EINTR 則說明recv函數是由於程序接收到信號後返回的,socket連接還是正常的,不應close掉socket連接。
法二:
struct tcp_info info;
int len=sizeof(info);
getsockopt(sock, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
if((info.tcpi_state==TCP_ESTABLISHED)) 則說明未斷開 else 斷開
法三:
若使用了select等系統函數,若遠端斷開,則select返回1,recv返回0則斷開。其他注意事項同法一。
法四:
int keepAlive = 1; // 開啟keepalive屬性
int keepIdle = 60; // 如該連接在60秒內沒有任何數據往來,則進行探測
int keepInterval = 5; // 探測時發包的時間間隔為5 秒
int keepCount = 3; // 探測嘗試的次數.如果第1次探測包就收到響應了,則後2次的不再發.
setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));
setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));
setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));
設置後,若斷開,則在使用該socket讀寫時立即失敗,並返回ETIMEDOUT錯誤
10. 如何判斷socket客戶端連接斷開
你可以根據伺服器收到的數據的長度來判斷,如果伺服器收到的數據長度是0,那麼意味著你的客戶端程序已經斷開了連接。從tcp/ip協議棧的角度來說,就是客戶端程序關閉了自己寫的這一半連接,向伺服器發出了一個fin。這涉及到tcp的狀態遷移,關於這方面的知識,建議你看一下richard
stevens先生的《tcp/ip
詳解》卷一和《unix網路編程》卷一,上面有詳細的解釋。
關於你的第二個問題,建議你仔細看一下自己的伺服器程序代碼。伺服器程序首先要建立一個監聽socket,當有客戶端連接上來時,伺服器會在一個新socket上接受客戶端連接。所以並不存在「亂」的問題。關於這個問題同樣推薦你看上面的兩本關於網路編程的經典著作。