套接字多线程编程DataInputStream.available()=0,而outputstream写入正确



我在客户端类中使用了一个套接字,并尝试从服务器中获取一个成功写入DataOutputStream的字符串。下面是示例代码。

try(Socket socket = new Socket(ip, port);)
{
// Output and Input Stream
DataInputStream input = new DataInputStream(socket.getInputStream());

DataOutputStream output = new DataOutputStream(socket.getOutputStream());       

//receive message from server
while(true && input.available() > 0)
{
String message = input.readUTF();
System.out.println(message);
TextArea.setText(message);
}

} 
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e) 
{
e.printStackTrace();
}

但是,当我的客户想要在TextArea中显示该消息时。看起来input.available((=0,因此不会显示该消息。但当我打印出消息字符串时,它确实是我想要的字符串,这真的很令人困惑。最后,我去掉while语句,直接使用TextArea.setText(message)来显示该消息。有人能帮我澄清一下吗?

服务器需要什么协议?如果服务器首先期望某个请求(例如HTTP(,则需要在期望输入流中发送任何字节之前发送请求(input.available为0的原因(。

有关示例,请参见此处:https://www.infoworld.com/article/2853780/socket-programming-for-scalable-systems.html

相关内容

  • 没有找到相关文章

最新更新