Java 客户端while循环从服务器发送和接收
这是连接到服务器的客户端应用程序。我使用一个名为DataPackage的对象来回发送信息。代码在自己的线程中运行Java 客户端while循环从服务器发送和接收,java,networking,Java,Networking,这是连接到服务器的客户端应用程序。我使用一个名为DataPackage的对象来回发送信息。代码在自己的线程中运行 中的变量是一个ObjectInputStream,out是一个ObjectOutputStream DataPackage dp = null; while (true) { try { dp = (DataPackage) in.readObject(); if (dp != null) { // Do stuff
中的变量是一个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)
之前,等待来自服务器的内容。我应该如何构造我的代码,以便我可以随时发送和接收资料?我希望您能理解。您可以使用线程。如果它们使用相同的套接字与外部服务器通信,这很常见,因为它们在等待从套接字读取时不会阻塞
线程1:
读块
收到信息后-做点什么
线程2:
做事
在发生某些事情时-写入套接字您可以使用线程。如果它们使用相同的套接字与外部服务器通信,这很常见,因为它们在等待从套接字读取时不会阻塞
线程1:
读块
收到信息后-做点什么
线程2:
做事
在发生某些事情时-将.readObject()中的行dp=(数据包)写入套接字代码>正在阻塞。这意味着在收到服务器的回复之前,它不会完成下面几行的执行
一个建议是,在.readObject()中创建一个新线程并传递dp=(DataPackage)的实例代码>这样它就不会阻塞。在.readObject()中的行dp=(数据包)代码>正在阻塞。这意味着在收到服务器的回复之前,它不会完成下面几行的执行
一个建议是,在.readObject()中创建一个新线程并传递dp=(DataPackage)的实例代码>这样它就不会阻塞。是否可以创建两个客户端线程,一个用于读取,另一个用于写入?是否可以创建两个客户端线程,一个用于读取,另一个用于写入?