隨筆-62  評論-29  文章-0  trackbacks-0
          apahce mina的客戶端可以直接用socket嗎?我現在正在做一個系統,希望這個系統可以在j2me上運行,當然想要在j2me上運行就不可能用mina的開發包。我想用一個socket建立一個客戶端,與mina server通訊,做了一些測試的類。但是在編碼的時候出現問題。如果不用mina filter的話,都不能夠進行數據的傳輸。用的話就又用到了mina框架。實在是讓人琢磨不透?為什么一個框架還要限制客戶端使用什么技術呢?

          這些方法可以幫助你在不使用mina filter的情況下進行轉碼!如果你手機上直接用socket的話,mina server就不能用filter。所以說下面的方法對你來說很有用的。你可以把你的代碼弄出來大家看看。那樣會更好的幫你找出問題的所在

          /**
          * 將byte[]轉換成string
          * @param butBuffer
          */
          public static String byteToString(byte [] b)
          {
          StringBuffer stringBuffer = new StringBuffer();
          for (int i = 0; i < b.length; i++)
          {
          stringBuffer.append((char) b [i]);
          }
          return stringBuffer.toString();
          }

          /**
          * 將bytebuffer轉換成string
          * @param str
          */
          public static IoBuffer stringToIoBuffer(String str)
          {

          byte bt[] = str.getBytes();

          IoBuffer ioBuffer = IoBuffer.allocate(bt.length);
          ioBuffer.put(bt, 0, bt.length);
          ioBuffer.flip();
          return ioBuffer;
          }
          /**
          * 將IoBuffer轉換成string
          * @param str
          */
          public static IoBuffer byteToIoBuffer(byte [] bt,int length)
          {

          IoBuffer ioBuffer = IoBuffer.allocate(length);
          ioBuffer.put(bt, 0, length);
          ioBuffer.flip();
          return ioBuffer;
          }
          /**
          * 將IoBuffer轉換成byte
          * @param str
          */
          public static byte [] ioBufferToByte(Object message)
          {
          if (!(message instanceof IoBuffer))
          {
          return null;
          }
          IoBuffer ioBuffer = (IoBuffer)message;
          byte[] b = new byte[ioBuffer.limit()];
          ioBuffer.get(b);
          return b;
          }
          /**
          * 將IoBuffer轉換成string
          * @param butBuffer
          */
          public static String ioBufferToString(Object message)
          {
          if (!(message instanceof IoBuffer))
          {
          return "";
          }
          IoBuffer ioBuffer = (IoBuffer) message;
          byte[] b = new byte [ioBuffer.limit()];
          ioBuffer.get(b);
          StringBuffer stringBuffer = new StringBuffer();

          for (int i = 0; i < b.length; i++)
          {

          stringBuffer.append((char) b [i]);
          }
          return stringBuffer.toString();
          }

          手機端:
                  try {
                      socket = (SocketConnection) Connector.open("socket://127.0.0.1:9123");
                      dis = socket.openDataInputStream();
                      dos = socket.openDataOutputStream();
                      String str = "111111";
                      dos.writeUTF(str);
                  } catch (IOException ex) {
                      ex.printStackTrace();
                  }
          將字符串:111111發給服務器端
          服務器端:如何得到數據呢?
                acceptor = new NioSocketAcceptor();
                  acceptor.getFilterChain().addLast("logger", new LoggingFilter());
                  //創建接收數據的過濾器
                  DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
                  //設定這個過濾器將一行一行(/r/n)的讀取數據
                  chain.addLast("myChin",new ProtocolCodecFilter(new TextLineCodecFactory()));
                  chain.addLast("ddd", new StreamWriteFilter());
                  acceptor.setHandler(new TimeServerHandler(this));//指定業務邏輯處理器
                  acceptor.setDefaultLocalAddress(new InetSocketAddress(PORT));//設置端口號
                  try {
                      //設置端口號
                      acceptor.bind(); //啟動監聽
                  } catch (IOException ex) {    }

          如果設置:chain.addLast("myChin",new ProtocolCodecFilter(new TextLineCodecFactory())); TimeServerHandler根本就執行不到:messageReceived,
          如果設置:        chain.addLast("ddd", new StreamWriteFilter()); TimeServerHandler的messageReceived能得到數據:message.toString()?。健?HeapBuffer[pos=0 lim=8 cap=2048: 00 06 31 31 31 31 31 31]"



          posted on 2009-03-09 20:44 閱讀(2327) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 潍坊市| 科技| 炎陵县| 绍兴市| 久治县| 竹溪县| 余庆县| 台前县| 饶阳县| 揭阳市| 阿尔山市| 宜丰县| 荃湾区| 铁力市| 嘉兴市| 古田县| 如东县| 郸城县| 泰来县| 河津市| 社会| 兴仁县| 盐亭县| 惠安县| 海淀区| 十堰市| 鞍山市| 贵定县| 大丰市| 纳雍县| 抚顺县| 平罗县| 崇左市| 卓资县| 宣威市| 威宁| 郸城县| 梧州市| 潢川县| 凌云县| 区。|