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> 

           

          主站蜘蛛池模板: 托克逊县| 安多县| 自贡市| 忻州市| 平潭县| 惠东县| 金坛市| 虎林市| 香格里拉县| 年辖:市辖区| 陆河县| 博客| 开封县| 金沙县| 泊头市| 南汇区| 醴陵市| 神木县| 赤峰市| 阜新市| 江永县| 年辖:市辖区| 阳高县| 霍林郭勒市| 白城市| 合阳县| 宁明县| 莆田市| 沽源县| 蚌埠市| 纳雍县| 盱眙县| 乐业县| 济南市| 乌鲁木齐县| 湖北省| 东乡| 湘潭县| 马关县| 东丰县| 都昌县|