我有一个 Java 桌面服务器和多个使用套接字的 Android 平板电脑客户端。两个或三个客户端中的每一个都向服务器发送一条短信,服务器发送一条响应消息。两篇短文。
服务器为每个客户端连接启动一个单独的线程。
问题是我设置了两个客户端并从每个客户端发送短信,然后其中一个客户端在发送一些消息后总是冻结并停止发送或接收更多消息。并非总是如此,但大约 50% 的时间。
我尝试调整套接字的超时时间并将 bufferedWriter 添加到输出流中。但是这两个变化都没有帮助。
桌面java应用程序,服务器我得到:
致命的: Fatal excepiton, null, java.net.SocketTimeoutException: Read timed out
一台Android平板电脑,客户端,我得到:
03-01 17:31:13.740: W/System.err(2992): java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)
有没有共同的原因,或者我可以尝试什么?
完整的服务器 logcat 如下所示:
2013/03/01 17:33:17 com.example.lotterygame.MultiThreader run
致命的: null
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at jp.co.forever.lotterygame.MultiThreader.run(MultiThreader.java:43)
at java.lang.Thread.run(Thread.java:662)
编辑,
在服务器中添加了 null 来自的行,
它在下面的代码中---> while((line = in.readLine())!= null){
@Override
public void run() {
try {
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("streams are setup from new thread\n");
String line ="";
while((line = in.readLine())!= null){
SocketPack spk = new SocketPack(socket, line.trim());
this.messageFromClient(spk);
}
out.close();
in.close();
socket.close();
} // end run
catch (IOException ex) {
Logger.getLogger(MultiThreader.class.getName()).log(Level.SEVERE, null, ex);
}
} // end run
public void messageFromClient(SocketPack msgc){
this.setChanged();
this.notifyObservers(msgc);
}