posts - 12,  comments - 2,  trackbacks - 0
          1、判斷socket遠(yuǎn)端是否已經(jīng)關(guān)閉
          try{
                socket.sendUrgentData(
          0xFF);//它會(huì)往輸出流發(fā)送一個(gè)字節(jié)的數(shù)據(jù),只要對(duì)方Socket的SO_OOBINLINE屬性沒(méi)有打開(kāi),就會(huì)自動(dòng)舍棄這個(gè)字節(jié),而SO_OOBINLINE屬性默認(rèn)情況下就是關(guān)閉的
          }
          catch(Exception ex){
                reconnect();
          }

          2、上面的方法是參考網(wǎng)上的實(shí)現(xiàn),自己又查看了一下java API才知道這根本有悖于socket程序設(shè)計(jì)的初衷。良好的實(shí)現(xiàn)應(yīng)該是這樣的:
          try {
              
          while (true{
                  socket.receive(dataPacket);
                  
          //
              }

          }
           catch (SocketTimeoutException e) {
              
          //處理超時(shí)
          }
           catch (PortUnreachableException e) {
              
          //處理連接中斷
          }
           catch (IOException e) {
              
          //IO異常
          }
           catch (IllegalBlockingModeException e) {
              
          //socket關(guān)聯(lián)了channel,但是該channel不是非阻塞模式
          }
          posted on 2008-12-02 22:33 遠(yuǎn)帆 閱讀(243) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Java
          主站蜘蛛池模板: 蒙山县| 当涂县| 乌拉特后旗| 四平市| 大安市| 稻城县| 竹山县| 施甸县| 阜宁县| 遵义县| 东乡| 搜索| 利川市| 惠来县| 嘉黎县| 梅河口市| 东阳市| 海阳市| 内黄县| 岳西县| 嘉兴市| 玉龙| 南康市| 东光县| 丁青县| 瑞昌市| 娱乐| 民县| 神木县| 大庆市| 金沙县| 和林格尔县| 库伦旗| 万山特区| 萍乡市| 同仁县| 新民市| 庐江县| 永丰县| 伊春市| 扬中市|