java - 服务器在 readUTF() 函数中被阻止

标签 java server client

我尝试在客户端和服务器之间连续共享信息,但在服务器读取时卡住了。

首先,客户端发送一些有关他自己的信息(id 和 str 字符串变量)

客户端

out.writeUTF(id+" "+str);
out.flush();
System.out.println("Do you want a room ?");
System.out.println("These are the available room");
String a4;
while((a4=in.readUTF()) != null)
    System.out.println(a4);
System.out.println("Pick one"); // It doesn't print that
sc4 = new Scanner(System.in);
String str4 = sc4.next();
out.writeUTF(str4);
out.flush();

服务器

out.writeUTF(Room.getAllRooms());
out.flush();
System.out.println("Before read");
String res = in.readUTF(); // stuck here
System.out.println("After read");
.
.
.

所有房间的打印在客户端中效果很好。但就在我无法访问打印“选择一个”之后。

服务器没有读取任何内容,但为什么服务器先读取而客户端不先写入?

(我简化了代码,实际上我使用的是使用线程的主/从架构)

更新:问题已解决,请阅读下面的回复。 (readUTF() 永远不会变成空)

最佳答案

您不是“卡住”,而是被阻止,不是处于“读取”状态,而是处于 readUTF() 状态,其原因是对等方既没有发送任何事情也没有关闭连接。这是预期的行为。您有一个 writeUTF() 和一个永无止境的循环 readUTF()。考虑一下您的应用程序协议(protocol)。

顺便说一句,你有一个错误:

while((a4=in.readUTF()) != null)
    System.out.println(a4);

readUTF() 从不返回 null。当对等方关闭连接时,它将抛出 EOFException

关于java - 服务器在 readUTF() 函数中被阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43448883/

相关文章:

java - Spark Datastax Java API 选择语句

java - 如果服务器不支持所使用的协议(protocol),JSSE 是否会实现回退?

php - Nginx 服务器(未显示更改)- 删除缓存?

javascript - 使用javascript将值从php页面传递到html页面

php - 数据库中的客户数据

java - TeeChart 轮廓线颜色

java.lang.ArrayIndexOutOfBoundsException : length=1; index=1 at forloop

java - 通过 Java Socket 发送对象真的很慢

http - SMTP 服务器是否使用 HTTP?

java - 通过套接字双向文件传输中的输入流干扰