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

时间:2017-04-17 09:36:56

标签: 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");
.
.
.

所有房间的印刷在客户端都很有效。但就在我无法访问打印之后#34;选择一个"。

服务器什么都没读,但为什么服务器先读取而客户端不先写?

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

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

1 个答案:

答案 0 :(得分:1)

你不是'卡住'而是被阻止,而不是'读'但是在var ref = $scope.delivery.orders[0]; ref = []; 中,原因是对等方既没有发送任何东西也没有关闭连接。这是预期的行为。您有{em>一个 readUTF()和一个永无止境的循环 writeUTF() s。考虑一下您的应用程序协议。

你有一个错误:

readUTF()

while((a4=in.readUTF()) != null) System.out.println(a4); 从不返回null。当对等方关闭连接时,它将抛出readUTF()