Java网络服务器/客户端,无法找到失败的地方

时间:2014-02-07 12:19:24

标签: java

您好我已将代码简化为这个简单的代码:
服务器代码

byte[] data=new byte[1024];
try {
  providerSocket=new ServerSocket(port);
  while(true) {
    connection=providerSocket.accept();
    in=connection.getInputStream();
    StringBuffer sb=new StringBuffer();
    while((len=in.available())>0) {
      in.read(data,0,len);
      sb.append(new String(data,0,len));
      reset(data); //writes -1 value to all bytes...
      len=0;
    }
    System.out.println("Get "+sb.toString());
    //does the same if I close() in, connection or do not close anything
  }
}
catch(IOException ioException){ }

客户端做了类似的事情:

Socket socket = new Socket(ip, port);
OutputStream out = socket.getOutputStream();
String s="Sample text";
out.write(s.getBytes());
out.flush();
out.close();
socket.close();
//closes cliente program

当我运行Server然后我运行客户端输出是“获取示例文本”,如果我再次运行客户端输出是“获取”whitout更多,确定错误很简单但我已经尝试了一切我不是查看它失败的地方!!!

为什么我收到第一次传输但是没有收到下一次传输? 当然我的示例代码有失败,比如没有关闭输入流等,但如果在System.out.println()之后我写了in.close()和/或connection.close()

,它就不会改变结果

问候。

2 个答案:

答案 0 :(得分:0)

只是注释掉

  \\ out.flush();
 \\  out.close();

一段时间并检查,因为我之前也收到此错误,但这是正确的方法,但有时会产生问题。

答案 1 :(得分:0)

不要使用in.available(),该方法不会按照您的想法执行。相反,将read()调用移至while循环条件。

int bytesRead = 0;
while((bytesRead = in.read(data)) != -1)
    ...