我在客户端类中使用了一个套接字,并尝试从服务器中获取一个成功写入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