2011-10-11 35 views
0

我writen的功能从服务器这样的发送和接收消息的接收消息:无法从服务器通过套接字的Android

//Send mess to server through socket 
public boolean send_Message_service(String mess) throws IOException{ 
    Log.i("debug", "Connection status: "+String.valueOf(this.clientSocket.isBound())); 
    boolean rs=false; 
    //Send mess toi server 
    BufferedReader in = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream())); 
    PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(this.clientSocket.getOutputStream())), true); 
    out.println(mess);  
    //Receive mess from server 

    String mess_From_Server=in.readLine(); 

    if(mess_From_Server.equalsIgnoreCase("success")){ 
     rs=true; 
    } 
    else{ 
     rs=false; 
    } 

    return rs; 
} 

这个函数可以将消息发送到服务器,但无法从服务器接收邮件,当我用我的手机运行它,需要很长时间并且强制关闭!

这里是logcat的:

10-11 12:17:35.201: INFO/global(279): Default buffer size used in BufferedWriter constructor. It would be better to be explicit if an 8k-char buffer is required. 
10-11 12:21:26.321: DEBUG/SntpClient(61): request time failed: java.net.SocketException: Address family not supported by protocol 

这里是服务器的代码(基于Java不是Android上运行):

int receiveMsgSize;//Size of received message 
    byte[] receiveBuf= new byte[100]; //Receive Buffer 
try { 
     ObjectOutputStream oos = new ObjectOutputStream(this.clientSocket.getOutputStream()); 
        InputStream in; 
     in = this.clientSocket.getInputStream(); 

     while((receiveMsgSize=in.read(receiveBuf))!=-1){ 

      String mess=new String(receiveBuf,0,receiveMsgSize); 
      System.out.println(mess.length()); 
      System.out.println(mess);           
      }                
      oos.writeObject("success"); 
     }       
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

“这不行”:信息不足。定义“不工作”。会发生什么呢? – EJP

+0

编辑我的问题! –

+0

你可以发布一些日志吗? – Durga

回答

2
  1. 你的服务器发送通过ObjectOutputStream.writeObject响应。
  2. 您的客户端通过BufferedReader.readLine()读取响应。

这是永远不会工作。

如果在一端有ObjectOutputStream,则必须在另一端有一个ObjectInputStream。

如果你在一端有writeObject(),你必须在另一端有readObject()。

如果你在一端有writeXXX(),你必须在另一端有readXXX(),对于我能想到的所有的XXX。

或者相反,如果你在一端有BufferedReader.readLine(),你必须有BufferedWriter.write(),然后在另一端有BufferedWriter.newLine()。

请勿在网络上使用PrintStream或PrintWriter,因为它们会吞噬您需要了解的异常。

+0

我明白你说什么:)感谢您的支持,我会尝试编辑我的代码和反馈很快! –

+0

我编辑了我的客户端使用 ObjectInputStream in2 = new ObjectInputStream(this.clientSocket.getInputStream()); String mess_From_Server = in2.readLine(); //但它仍然不起作用:( –

+0

它的工作,只是使用 字符串mess_From_Server =(String)in2.readObject(); –

相关问题