我用C++ socket 程式寫了客戶端和服務端通訊,出現了一個很奇怪的現象:
在服務器端和客戶端通訊正常鏈接的情況下,停止客戶端通訊程式,如果客戶端通訊程式停止時間比較長的話,再次打開 客戶端通訊程式,提示鏈接正常, 而同時服務器端程式提示 Waiting Connect...,一直在等待狀態。 這種情況下 只要按鍵盤 enter鍵,服務器端程式才提示鏈接成功。這種情況還是時有時無的。
哪位高手指點下,比較急,在線急等!
uj5u.com熱心網友回復:
肯定是程式的問題了uj5u.com熱心網友回復:
按服務器提示socket斷開了,等待新客戶端來鏈接。服務器是一直主動recv,網路斷開后,recv會回傳0,需要用GetErrorCode來判斷網路連接是否斷開(同步模式下不用,直接判斷斷開即可)你客戶端的提示就存在問題了!(也可能是服務器邏輯問題)
分析如下:
一:你服務器沒問題,如我開頭那里描述
你客戶端只需要再send一下,如果服務器沒bug,那么此時客戶端send會失敗,回傳0發送了零個位元組。socket同步模式下這里可以直接判斷socket斷開鏈接了,你客戶端需要提示:與服務器的網路連接已經斷開,請重新連接服務器,再發送。
異步下需要GetErrorCode一下,看看是不是wouldblock(網路堵塞,需要等會再重發),否則跟上述一樣鏈接斷開了。提示如上。
服務器有bug,那你的邏輯要重寫了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/99174.html
標籤:VC.NET
上一篇:電腦有多張網卡,用TCPIP客戶端連接指定IP地址和埠號會連接失敗,禁用掉多余的網卡,再次連接就能成功
下一篇:WINDOWS編程 API攔截
