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屬性沒有打開,就會(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)帆 閱讀(248) 評(píng)論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 琼海市| 崇仁县| 新丰县| 城市| 张家界市| 双鸭山市| 永年县| 青岛市| 施秉县| 巴林右旗| 桑日县| 深州市| 三台县| 大理市| 萨嘎县| 吴堡县| 威信县| 百色市| 建宁县| 泗阳县| 石林| 曲阳县| 龙川县| 宁都县| 昌平区| 噶尔县| 休宁县| 凯里市| 铜山县| 威远县| 南开区| 饶平县| 莎车县| 禹城市| 聂荣县| 岢岚县| 九台市| 德化县| 万载县| 青田县| 屏山县|