The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

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

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

          Java應(yīng)用程序代碼:
           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",否則數(shù)據(jù)不能成功發(fā)送  
                      }  
                  ]]--> 
              </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="發(fā)送" horizontalCenter="0" verticalCenter="121" click="sendData()"/> 
              <mx:Button label="連接" horizontalCenter="0" verticalCenter="-103" click="connectServer()"/> 
          </mx:Application> 

           

          主站蜘蛛池模板: 洪雅县| 潼关县| 保德县| 镇雄县| 大新县| 余干县| 万宁市| 琼中| 蓝山县| 合江县| 岚皋县| 苗栗市| 金平| 沿河| 西宁市| 泸定县| 蓬溪县| 郧西县| 壤塘县| 淄博市| 青浦区| 繁峙县| 吴旗县| 九龙坡区| 嘉禾县| 杭锦后旗| 玛纳斯县| 海南省| 南宫市| 大新县| 大厂| 廉江市| 靖边县| 徐州市| 辉县市| 大新县| 永仁县| 岗巴县| 莫力| 台北市| 延边|