2011-04-16 176 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) 
       { 

       } 
      }