我写了一个函数来发送和接收来自服务器的消息,如下所示:
//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 :(得分:2)
这永远不会起作用。
如果一端有ObjectOutputStream,则必须在另一端有一个ObjectInputStream。
如果你的一端有writeObject(),你必须在另一端有readObject()。
如果你在一端有writeXXX(),你必须在另一端有readXXX(),对于我能想到的所有XXX。
或者相反,如果你在一端有BufferedReader.readLine(),你必须在另一端有BufferedWriter.write(),然后是BufferedWriter.newLine()。
不要在网络上使用PrintStream或PrintWriter,因为它们会吞下您需要了解的异常。