为什么我的服务器没有从我的客户端接收数据?

时间:2012-12-22 16:24:57

标签: java sockets java-io

当我正在学习Java中的网络和io时,我正在慢慢构建客户端/服务器应用程序以应用我正在阅读的不同教程。我很难过,而且我一直想弄清楚为什么我的代码长时间没有工作。所以我决定转向SO的无限智慧:)

从localhost接受客户端套接字连接后,我在服务器上有这个:

BufferedInputStream in = new BufferedInputStream(socket.getInputStream(),Config.BUFFER_SIZE_NET);
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream(),Config.BUFFER_SIZE_NET);
String msg = "";
byte buffer[] = new byte[Config.BUFFER_SIZE_READ];
int bytesRead;
System.out.println("Server is waiting for data");
while ((bytesRead = in.read(buffer)) > 0) {
    msg = msg + new String(buffer,Config.CHARSET);
}
System.out.println("Server received: "+msg);

连接到服务器后,在按下JButton后在客户端执行此操作:

BufferedInputStream in = new BufferedInputStream(socket.getInputStream(),Config.BUFFER_SIZE_NET);
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream(),Config.BUFFER_SIZE_NET);
String msg = "msg";
try{
    out.write(msg.getBytes(Config.CHARSET));
    out.flush();
    System.out.println("Client sent: "+msg);
}catch(Throwable e){e.printStackTrace();}

按下客户端上的按钮后,我得到了这个输出:

Client sent: msg

在服务器端,我得到:

Server is waiting for data

如果我调试服务器,我会在下一行看到它永远被阻止:

while ((bytesRead = in.read(buffer)) > 0) {

不会抛出异常。我在这里错过了什么?我以前工作过,但是我做了很多改动,现在我无法恢复工作。

注意:这是实际代码的略微修改版本,以便于审核。如果您认为缺少相关内容,请告诉我们!

1 个答案:

答案 0 :(得分:0)

我走出了自己挖洞的洞。事实证明,我没有检查收到的数据的结尾,因此代码被阻塞了阻塞读取或后续循环。通过检查服务器读取的数据中的特定字节序列,在while循环内部,我能够识别数据的结束并从循环中断。

我不知道这是否是上述问题的(最)正确答案,但我以这种方式解决了,所以我将其作为答案提交。