这是我连接到服务器的客户端应用程序。我使用一个名为DataPackage的对象来回发送信息。代码在自己的线程中运行。
变量in
是ObjectInputStream
,out
是ObjectOutputStream
。
DataPackage dp = null;
while (true) {
try {
dp = (DataPackage) in.readObject();
if (dp != null) {
// Do stuff with received object
}
if (sendSomething) { // Send stuff
out.writeObject( new DataPackage("some data") );
out.flush();
out.reset();
}
} catch (ClassNotFoundException | IOException e1) {
e1.printStackTrace();
}
try {
t.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
我的代码的问题是我从未到达我发送内容的部分,除非我从服务器收到一些东西。循环在继续if (sendSomething)
之前等待来自服务器的内容。我应该如何构建我的代码,以便我可以随时发送内容并随时收到内容?我希望你明白。
答案 0 :(得分:2)
您可以使用线程。如果他们使用相同的套接字与外部服务器通信,这很常见,因为他们在等待从套接字读取时不会阻塞。
线程1:
阻止阅读 收到消息 - 做点什么
线程2: 做事 发生的事情 - 写入套接字
答案 1 :(得分:1)
行dp = (DataPackage) in.readObject();
正在阻止。这意味着在收到服务器的回复之前,它不会完成下面的行的执行。
一个建议,创建一个新线程并传递dp = (DataPackage) in.readObject();
的实例,这样它就不会阻塞。