2011-04-16 174 views
1

步驟來完成:通訊通過套接字連接:

我的服務器上運行尋找連接套接字4444

我有android的應用程序連接到插座。

我有android應用程序跨套接字連接發送兩個參數。

我有服務器消化兩個單獨的參數並相應地處理它們。

當我嘗試發回消息時,我的問題就開始了。

請大家幫助我一個客戶端類和服務器類的例子,使用BufferedReaderPrintWriter將數據從客戶端發送到服務器,接受服務器端的數據並返回數據以供客戶端接收?

感謝您的幫助。

+0

其BufferedReader,謝謝。 – 2011-04-16 17:47:51

回答

1

創建從插座輸出流的新PrintWriter

PrintWriter writer = new PrintWriter(new BufferedOutputStream(socket.getOutputStream())); 
writer.write("blather"); 
writer.flush(); 
+0

嗨橋,我已經這樣做了。但出於某種原因,或者我沒有正確讀取客戶端返回的消息,或者我沒有正確發送它。 我將清理我的代碼並在幾分鐘內將它發佈到這裏。 – 2011-04-16 20:22:10

+0

你沖洗()? – sbridges 2011-04-17 02:00:06

+0

是的,我感謝;)我只是忽略關閉在客戶端的套接字。非常愚蠢!謝謝! – 2011-04-17 02:43:26

0


不使用讀/寫器有時我造成的問題,比如我們無法預測字符串的結尾,etc.So請寫或只讀字節或字節數組。這是更好的方法。
以下是樣本編碼代碼片段

     socket=new Socket(this.ipAddress,this.port_number); 

      //socket.setSocketImplFactory(fac) 
      Log.i(tagName, "after creating sokcet"); 

      os=socket.getOutputStream(); 
      is=socket.getInputStream(); 

      dos=new DataOutputStream(os);    
      Log.i(tagName, "after creating ouput streams"); 

      dis=new DataInputStream(is); 
      Log.i(tagName, "after creating input streams"); 

      //dos.writeUTF(msg[i].trim()); 
      //dos.write(msg[i].trim().getBytes()); 

      //dos.writeUTF(msg[i].trim()); 
      dos.write(msg[i].trim().getBytes()); 
      //dos.writeUTF(str) 
      dos.flush(); 

      Log.i(tagName, "after writing data to os"); 

      StringBuilder sbuilder=new StringBuilder(); 

      ///* 
      int ch; 
      byte bt=1; 
      while((bt=(byte) dis.read())!=-1) 
      { 
       Log.i(tagName, "ch="+bt); 
       byte temp[]=new byte[1]; 
       //temp[0]=(byte)ch; 
       temp[0]=(byte)bt; 
       String tempStr1=new String(temp); 
       Log.i(tagName, "tempstr:"+tempStr1); 

       sbuilder.append(tempStr1); 

       Log.i(tagName, "Data fro server : "+sbuilder.toString()); 
       tempStr1=null; 
      } 
      //*/ 
      //byte tt[]=new byte[dis.readLine()] 
      //resultStr=dis.readLine();resultStr=resultStr.trim(); 
      resultStr=sbuilder.toString(); 
      Log.i(tagName, "server res :"+resultStr); 
      (Toast.makeText(this.actitivity,"Result : "+resultStr,Toast.LENGTH_SHORT)).show(); 


      if(dos!=null) 
      { 
       try 
       { 
        dos.close(); 
       } 
       catch(Exception ex) 
       { 

       } 
      } 

      if(dis!=null) 
      { 
       try 
       { 
        dis.close(); 
       } 
       catch(Exception ex){} 
      } 
      if(socket!=null) 
      { 
       try 
       { 
        socket.close(); 
       } 
       catch(Exception ex) 
       { 

       } 
      }