The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

          Flex中XMLSocket與Java中Socket通信,遇到的問題是,Java中的socket能夠接受到XMLSocket傳輸的數據,但是Flex并不能接受到從Java服務器傳輸的數據,從網上搜了好多資料,終于找到了原因,原來XMLSocket 接收到服務端下發的數據時,將連續放于接收緩沖區,直到接收到 "\0" 字節(字節內容為 ASCII 值 0),才認為接收完成,并調用相應的 onData 或 onXML 事件,因此,服務端若用 Java 編寫,并使用標準的 String 類族,則在發送數據結尾應手動加上 "\0",同樣,當XMLSocket發送數據時,也會在數據的結尾自動加上"\0"。

          我現在將我做的一個簡單的XMLSocket通信的例子貼出來跟大家共享一下,如果有什么不足的地方,還望大家批評指出,畢竟我也是flex初學者,呵呵!

          Java應用程序代碼:
           view plaincopy to clipboardprint?
          public class XMLServerSocket {  
           
           
              private ServerSocket serverSocket;  
           
              private Socket socketin;  
           
              private BufferedReader br;  
           
              private PrintStream ps;  
           
              public static void main(String[] args) {  
                  new XMLServerSocket();  
              }  
           
              private XMLServerSocket() {  
                  try {  
                      serverSocket = new ServerSocket(8800);  
                      socketin = serverSocket.accept();  
                      br = new BufferedReader(new InputStreamReader(socketin  
                              .getInputStream()));  
                      ps = new PrintStream(socketin.getOutputStream());  
                      ps.println("Input EXIT for end\0");  
                      ps.flush();  
                      out("Input EXIT for end");  
                      boolean done = false;  
                      while (!done) {  
                          String str = br.readLine();  
                          if (str == null || (str.length() == 1 && str.charAt(0) == '\0')) {  
                              done = true;  
                          } else {  
                              char first = str.charAt(0);  
                              char tail = str.charAt(str.length() - 1);  
                              if (first == '\0') {  
                                  str = str.substring(1);  
                              }  
                              if (tail == '\0') {  
                                  str = str.substring(0, str.length() - 2);  
                              }  
                              out(str);  
                              ps.println(str + "\0");  
                              if (str.trim().equals("EXIT")) {  
                                  done = true;  
                                  br.close();  
                              }  
                          }  
                      }  
                  } catch (Exception e) {  
                      System.out.println(e.getMessage());  
                  }  
              }  
           
              private void out(String str) {  
                  System.out.println(str);  
              }  
           

          public class XMLServerSocket {


           private ServerSocket serverSocket;

           private Socket socketin;

           private BufferedReader br;

           private PrintStream ps;

           public static void main(String[] args) {
            new XMLServerSocket();
           }

           private XMLServerSocket() {
            try {
             serverSocket = new ServerSocket(8800);
             socketin = serverSocket.accept();
             br = new BufferedReader(new InputStreamReader(socketin
               .getInputStream()));
             ps = new PrintStream(socketin.getOutputStream());
             ps.println("Input EXIT for end\0");
             ps.flush();
             out("Input EXIT for end");
             boolean done = false;
             while (!done) {
              String str = br.readLine();
              if (str == null || (str.length() == 1 && str.charAt(0) == '\0')) {
               done = true;
              } else {
               char first = str.charAt(0);
               char tail = str.charAt(str.length() - 1);
               if (first == '\0') {
                str = str.substring(1);
               }
               if (tail == '\0') {
                str = str.substring(0, str.length() - 2);
               }
               out(str);
               ps.println(str + "\0");
               if (str.trim().equals("EXIT")) {
                done = true;
                br.close();
               }
              }
             }
            } catch (Exception e) {
             System.out.println(e.getMessage());
            }
           }

           private void out(String str) {
            System.out.println(str);
           }

          }

          Flex程序代碼:

          view plaincopy to clipboardprint?
          <?xml version="1.0" encoding="utf-8"?> 
          <mx:Application xmlns:mx="    <mx:Script> 
                  <!--[CDATA[  
                      private var xmlconnect:XMLSocket;  
                      private function connectServer():void  
                      {  
                          try{  
                              xmlconnect = new XMLSocket();  
                              xmlconnect.connect("localhost",8800);  
                              xmlconnect.addEventListener(DataEvent.DATA,onData);  
                          }  
                          catch(e:Error)  
                          {  
                              trace(e.message);  
                          }  
                      }  
                      private function onData(event:DataEvent):void  
                      {  
                          content.text = event.text;  
                      }  
                      private function sendData():void  
                      {  
                          xmlconnect.send(datasend.text + "\n");//必須加上"\n",否則數據不能成功發送  
                      }  
                  ]]--> 
              </mx:Script> 
              <mx:Text id="content" width="271" height="116" horizontalCenter="0" verticalCenter="0" /> 
              <mx:TextInput id="datasend" horizontalCenter="0" verticalCenter="95"/> 
              <mx:Button label="發送" horizontalCenter="0" verticalCenter="121" click="sendData()"/> 
              <mx:Button label="連接" horizontalCenter="0" verticalCenter="-103" click="connectServer()"/> 
          </mx:Application> 

           

          主站蜘蛛池模板: 井研县| 南溪县| 稷山县| 华宁县| 育儿| 大方县| 安阳市| 子长县| 庆云县| 阜平县| 济阳县| 旺苍县| 云南省| 新和县| 阿克| 耿马| 晋州市| 宣武区| 海伦市| 讷河市| 阳城县| 克什克腾旗| 英吉沙县| 安龙县| 平果县| 庆元县| 离岛区| 和平区| 平南县| 侯马市| 黔西县| 梨树县| 六枝特区| 泗阳县| 河间市| 明水县| 宜昌市| 钟山县| 巍山| 宁化县| 巨野县|