客户端怎么判断Socket连接已与服务器断开 客户端怎么判断Socket连接已与服务器断开

\u5ba2\u6237\u7aef\u600e\u4e48\u5224\u65adSocket\u8fde\u63a5\u5df2\u4e0e\u670d\u52a1\u5668\u65ad\u5f00

\u5982\u679c\u670d\u52a1\u5668\u6536\u5230\u7684\u6570\u636e\u957f\u5ea6\u662f0\uff0c\u90a3\u4e48\u610f\u5473\u7740\u4f60\u7684\u5ba2\u6237\u7aef\u7a0b\u5e8f\u5df2\u7ecf\u65ad\u5f00\u4e86\u8fde\u63a5\u3002\u4eceTCP/IP\u534f\u8bae\u6808\u7684\u89d2\u5ea6\u6765\u8bf4\uff0c\u5c31\u662f\u5ba2\u6237\u7aef\u7a0b\u5e8f\u5173\u95ed\u4e86\u81ea\u5df1\u5199\u7684\u8fd9\u4e00\u534a\u8fde\u63a5\uff0c\u5411\u670d\u52a1\u5668\u53d1\u51fa\u4e86\u4e00\u4e2aFIN\u3002\u8fd9\u6d89\u53ca\u5230TCP\u7684\u72b6\u6001\u8fc1\u79fb\uff0c\u5173\u4e8e\u8fd9\u65b9\u9762\u7684\u77e5\u8bc6\uff0c\u5efa\u8bae\u4f60\u770b\u4e00\u4e0bRichard Stevens\u5148\u751f\u7684\u300aTCP/IP \u8be6\u89e3\u300b\u5377\u4e00\u548c\u300aUnix\u7f51\u7edc\u7f16\u7a0b\u300b\u5377\u4e00\uff0c\u4e0a\u9762\u6709\u8be6\u7ec6\u7684\u89e3\u91ca\u3002http://www.tuidc.com/

socket\u65ad\u5f00\u7684\u65f6\u5019
\u7a0b\u5e8f\u80fd\u89e6\u53d1\u4e00\u4e2a\u4e8b\u4ef6\u7684

法一:

当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错误

法五:

自己实现一个心跳检测,一定时间内未收到自定义的心跳包则标记为已断开。

  • ...鍣杩炴帴銆瀹㈡埛绔姣忎竴娈垫椂闂村彂涓涓秷鎭,鎬庝箞鍒ゆ柇鏈嶅姟鍣socket...
    绛旓細鏃㈢劧鏄socket閫氫俊锛屼綘灏卞啓涓涓悓姝ラ氫俊銆傛瘮濡瀹㈡埛绔鍙戜釜娑堟伅鍚庡氨鐩戝惉锛屾湇鍔″櫒灏卞厛鐩戝惉锛屾敹鍒版秷鎭悗鍙戠粰瀹㈡埛绔紝杩欐牱灏卞彲浠ヤ簡銆
  • c#濡備綍鍒ゆ柇socket杩炴帴ip鏄繛鎺ョ殑
    绛旓細涓婇潰鎵璇寸殑鏂规硶锛屾槸鐩存帴鍒╃敤winsock API缂栫▼鏃剁敤鐨勬柟娉曪紝濡傛灉鐢⊿ystem.Net锛屽彲浠ヨ繖鏍锋潵鑾峰緱鎵accept鐨瀹㈡埛绔鐨処P鍦板潃锛歍cpClient client = myListener.EndAcceptTcpClient(ar);IPAddress clientIP =((IPEndPoint)(client.Client.RemoteEndPoint)).Address;浣犲彲浠ョ敤涓涓暟缁勬潵淇濆瓨鍚勪釜宸茬粡杩炴帴鐨刢lientIP锛屽湪鎺ュ彈...
  • 鎵嬫満搴旂敤Socket鏈杩炴帴鏄鎬庝箞鍥炰簨?
    绛旓細濡傛灉鎮ㄧ殑鎵嬫満搴旂敤Socket鏈杩炴帴锛屽彲鑳芥槸鐢变簬浠ヤ笅鍘熷洜锛1. 缃戠粶杩炴帴闂锛氭墜鏈哄簲鐢ㄦ棤娉曡繛鎺ュ埌鏈嶅姟鍣紝鍙兘鏄敱浜庣綉缁滆繛鎺ラ棶棰橈紝渚嬪鎮ㄧ殑鎵嬫満娌℃湁鑱旂綉鎴栬呯綉缁滀笉绋冲畾绛夊師鍥犮2. 鏈嶅姟鍣ㄨ繛鎺ラ棶棰橈細鏈嶅姟鍣ㄧ鏈垚鍔熷紑鍚垨鑰呮湭姝e父杩愯锛屽鑷存棤娉曚笌瀹㈡埛绔寤虹珛杩炴帴銆3. 绔彛鍙锋垨IP鍦板潃璁剧疆閿欒锛氬鏋滄偍鐨勫簲鐢ㄨ繛鎺ヤ笉鍒...
  • socket,tcp,http涓夎呬箣闂寸殑鍖哄埆鍜屽師鐞
    绛旓細鐢ㄥ眰鍙互鍜屼紶杈撳眰閫氳繃Socket鎺ュ彛,鍖哄垎鏉ヨ嚜涓嶅悓搴旂敤绋嬪簭杩涚▼鎴栫綉缁滆繛鎺ョ殑閫氫俊,瀹炵幇鏁版嵁浼犺緭鐨勫苟鍙戞湇鍔°3.2 寤虹珛socket杩炴帴寤虹珛Socket杩炴帴鑷冲皯闇瑕佷竴瀵瑰鎺ュ瓧,鍏朵腑涓涓繍琛屼簬瀹㈡埛绔,绉颁负ClientSocket ,鍙︿竴涓繍琛屼簬鏈嶅姟鍣ㄧ,绉颁负ServerSocket 銆傚鎺ュ瓧涔嬮棿鐨勮繛鎺ヨ繃绋嬪垎涓轰笁涓楠:鏈嶅姟鍣ㄧ洃鍚,瀹㈡埛绔姹,杩炴帴纭銆傛湇鍔...
  • android浣滀负瀹㈡埛绔鐨socket閫氫俊,鎬庢牱鍒ゆ柇瓒呮椂?
    绛旓細socket鏈夌姸鎬佺爜鍙互鍙栫殑銆傚ソ鍍忔槸socket.getStatus()銆傜劧鍚庢牴鎹笉鍚岀殑鐘舵佺爜鍒ゆ柇銆
  • c# socket 鏈嶅姟鍣绔浣曞垽鏂鎴风鎺夌嚎
    绛旓細鐢⊿ocket涓殑poll鏂规硶妫鏌 static bool IsSocketConnected(Socket s) { return !((s.Poll(1000, SelectMode.SelectRead) && (s.Available == 0)) || !s.Connected); } 涓嶈繃锛屽鏋瀹㈡埛绔涓嶆槸绋嬪簭閫鍑恒佺數鑴戝叧鏈虹瓑姝e父鏂嚎鏂瑰紡锛岃屼笖鍥犱负缃戠嚎琚嫈绛夐潪姝e父鏂嚎锛岃繖绉嶆柟娉曟病鏈夌敤銆傝繕鏄...
  • 濡備綍鍒ゆ柇瀹㈡埛绔鏄惁濡備綍鍒ゆ柇鏄惁涓庢湇鍔″櫒鏂紑浜
    绛旓細杩欐秹鍙婂埌TCP鐨勭姸鎬佽縼绉伙紝鍏充簬杩欐柟闈㈢殑鐭ヨ瘑锛屽缓璁綘鐪嬩竴涓婻ichard Stevens鍏堢敓鐨勩奣CP/IP 璇﹁В銆嬪嵎涓鍜屻奤nix缃戠粶缂栫▼銆嬪嵎涓锛屼笂闈㈡湁璇︾粏鐨勮В閲娿傚叧浜庝綘鐨勭浜屼釜闂锛屽缓璁綘浠旂粏鐪嬩竴涓嬭嚜宸辩殑鏈嶅姟鍣ㄧ▼搴忎唬鐮併傛湇鍔″櫒绋嬪簭棣栧厛瑕佸缓绔嬩竴涓洃鍚socket锛屽綋鏈瀹㈡埛绔繛鎺涓婃潵鏃讹紝鏈嶅姟鍣ㄤ細鍦ㄤ竴涓柊socket涓婃帴鍙...
  • 鎬庢牱鍒ゅ畾socket杩炴帴宸茬粡鍏抽棴
    绛旓細1锛夎缃帴鏀跺埌鐨socket涓哄紓姝ユ柟寮忥紱2锛変娇鐢╯elect()鍑芥暟娴嬭瘯涓涓猻ocket鏄惁鍙锛3锛夊鏋渟elect()鍑芥暟杩斿洖鐨勫间负1锛屼絾鏄娇鐢╮ecv()鍑芥暟璇诲彇鐨勬暟鎹暱搴︿负0锛岄偅涔堣鏄庤socket宸茬粡鏂紑銆4锛夊鏋渞ecv()杩斿洖鍊煎皬浜庣瓑浜0鏃讹紝瀹㈡埛绔鐨杩炴帴宸茬粡鏂紑锛屼絾鏄繕闇瑕鍒ゆ柇errno鏄惁绛変簬EINTR銆傚鏋渆rrno=EINTR鍒欒鏄巖ecv(...
  • 灏忕櫧姹傛暀,鍏充簬JAVA socket瀹㈡埛绔 鍜屾湇鍔$鐨勯氫俊
    绛旓細1銆瀹㈡埛绔繛鎺涓鑸槸涓庣敤鎴风粦瀹氱殑锛屾棤鐢ㄦ埛鏁版嵁鐨剆ocket灏辩畻鑳藉尯鍒嗚繛鎺ヤ篃姣棤鎰忎箟銆備竴鑸仛娉曟槸瀹㈡埛绔埄鐢℉TTP鐧诲綍锛岀櫥褰曟湇鍔″櫒鍒嗘瀽鍚勪釜socket鏈嶅姟鍣ㄧ殑璐熻浇鍚庡彂閫佺粰瀹㈡埛绔簲璇ヨ繛鎺ュ摢涓猻ocket鏈嶅姟鍣紝瀹㈡埛绔嬁鍒扮櫥褰曟垚鍔熷悗鐨勭敤鎴稩D鍚庡啀杩炴帴socket鏈嶅姟鍣紝姝ょ敤鎴稩D灏卞彲浠ョ敤浜巗ocket鏈嶅姟鍣ㄥ尯鍒嗗鎴风杩炴帴銆2銆佸鏋滆嚜寤...
  • socket鍜宧ttp鍖哄埆
    绛旓細2銆Socket鏄瀹㈡埛绔璺熸湇鍔″櫒鐩存帴浣跨敤Socket濂楁帴瀛楄繘琛杩炴帴锛屽苟娌℃湁瑙勫畾杩炴帴鍚庢柇寮锛屾墍浠ュ鎴风鍜屾湇鍔″櫒鍙繚鎸佽繛鎺ラ氶亾锛屽弻鏂归兘鍙互涓诲姩鍙戦佹暟鎹3銆丠TTP锛氳秴鏂囨湰浼犺緭鍗忚锛岄鍏堝畠鏄竴涓崗璁紝骞朵笖鏄熀浜嶵CP/IP鍗忚鍩虹涔嬩笂鐨勫簲鐢ㄥ眰鍗忚銆係ocket涓嶅睘浜庡崗璁寖鐣达紝鑰屾槸涓涓皟鐢ㄦ帴鍙o紙API锛夛紝Socket鏄TCP/IP...
  • 扩展阅读:socksdroid apk ... socket error 10061 ... socketpro ... socket客户端之间的通信 ... windows socket error ... sockboom不能用了 ... proxydroid apk ... socket多客户端连接 ... php socket客户端 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网