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> 

           

          主站蜘蛛池模板: 紫阳县| 嘉兴市| 白山市| 唐山市| 云安县| 大竹县| 南部县| 宜宾县| 新巴尔虎右旗| 明溪县| 科技| 聊城市| 云南省| 镇坪县| 无锡市| 昭通市| 崇信县| 翁牛特旗| 秦皇岛市| 全南县| 安庆市| 禹城市| 蓬莱市| 鄱阳县| 利辛县| 南平市| 溧阳市| 丰县| 许昌市| 佳木斯市| 保定市| 会宁县| 宁城县| 赫章县| 鄄城县| 石柱| 汉川市| 沁水县| 米泉市| 启东市| 嵩明县|