瘋狂

          STANDING ON THE SHOULDERS OF GIANTS
          posts - 481, comments - 486, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          日歷

          <2011年4月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          公告

          公眾號:
          QQjava交流群:51374316



          相冊

          搜索

          •  

          積分與排名

          • 積分 - 2843376
          • 排名 - 2

          最新隨筆

          xsocket socket學習

          Posted on 2009-11-17 14:53 瘋狂 閱讀(5950) 評論(3)  編輯  收藏 所屬分類: java
               最近項目中想通過java來調用c來啟動驅動程序 ,由于項目是部署在winCE上(內存30多m),初步定下使用socket,所以就看了下輕量級的開源xSocket ,感覺用起來挺簡單,而且性能和效率不錯。apace mina 也很強大但是功好多功能用不上也就沒用。
                xSocket是一個輕量級的基于nio(since jdk1.5)的服務器框架用于開發高性能、可擴展、多線程的服務器。該框架封裝了線程處理、異步讀/寫等方面。
              使用也很簡單 :
          server端:new Server(8090,new ServerDataHander()).start();
          client端:new NonBlockingConnection("localhost", 8090,new ClientDataHander());
           其中ServerDataHander,ClientDataHander為自己定義類,都可以實現接口IConnectExceptionHandler, IConnectHandler, IDisconnectHandler等接口:通過重寫回調函數來處理數據:操作相當方便。例如:
           
          public boolean onData(INonBlockingConnection connection)
                          
          throws IOException, BufferUnderflowException,
                          ClosedChannelException, MaxReadSizeExceededException 
          {
                      
          byte[] data = connection.readBytesByLength(connection.available());

                      
          //hander.
                      return true;
                  }


                  @Override
                  
          public boolean onConnectException(INonBlockingConnection connection,
                          IOException ioe) 
          throws IOException {
                      chatServer.area.append(
          "error connect please try again\r\n");
                      
          return true;
                  }


                  @Override
                  
          public boolean onConnect(INonBlockingConnection connection)
                          
          throws IOException, BufferUnderflowException,
                          MaxReadSizeExceededException 
          {
                      chatServer.area.append(
          "client["+connection.getRemoteAddress()+"] is connected\r\n");
                      
          return true;
                  }


                  @Override
                  
          public boolean onDisconnect(INonBlockingConnection connection)
                          
          throws IOException {
                      chatServer.area.append(
          "client["+connection.getRemotePort()+"] is disconnected\r\n");
                      
          return true;
                  }

            下面是自己做的一個例子:
          最終界面:
           server端:


          客戶端:


          可運行代碼下載(解壓可用):
          /Files/freeman1984/xsockettest.rar

          評論

          # re: xsocket socket學習  回復  更多評論   

          2011-04-19 17:53 by limingxing
          您好,我拜讀了您的xsocket做的聊天客戶端與服務端。遇到一個疑惑:
          public class XSocketClient {
          public static void main(String[] args) throws IOException {
          NonBlockingConnection bc = new NonBlockingConnection(host, port,new ClientDataHander());
          }
          }
          我在main函數中實例化了bc,就是這樣一個小程序,可是運行以后程序會馬上關閉,我不得其解。
          運行了您的代碼,結果卻又是非常正確的。我努力尋找我的代碼與您的代碼之間的區別,在于:我的main函數中實例化 NonBlockingConnection,而您的代碼中 NonBlockingConnection的實例化不在main函數中。為什么這樣的差別會造成現在的結果呢?如果我想自己的代碼能順利進行長連接該怎么辦呢?
          企盼您的解答。祝好~

          # re: xsocket socket學習  回復  更多評論   

          2011-04-25 10:07 by @joe
          @limingxing
          public static void main(String[] args) throws IOException {
          NonBlockingConnection bc = new NonBlockingConnection(host, port,new ClientDataHander());
          }
          }
          這明顯不對啊,參數從哪來,姐姐。

          # re: xsocket socket學習  回復  更多評論   

          2012-02-10 09:44 by LSH744
          請問服務端怎么發送消息給客戶端啊
          主站蜘蛛池模板: 柳江县| 定日县| 甘孜| 寿宁县| 巴林右旗| 时尚| 南华县| 台州市| 大安市| 潞西市| 古交市| 东乌珠穆沁旗| 平泉县| 康平县| 海兴县| 黄山市| 甘泉县| 罗甸县| 三江| 麻江县| 凤山市| 穆棱市| 嘉善县| 财经| 财经| 会东县| 锦屏县| 休宁县| 鲜城| 巴青县| 平舆县| 庆元县| 徐水县| 布尔津县| 临夏市| 龙井市| 平凉市| 民权县| 天镇县| 大庆市| 扶绥县|