Java 客户端while循环从服务器发送和接收

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

这是连接到服务器的客户端应用程序。我使用一个名为DataPackage的对象来回发送信息。代码在自己的线程中运行

中的变量
是一个
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)的实例这样它就不会阻塞。

是否可以创建两个客户端线程,一个用于读取,另一个用于写入?是否可以创建两个客户端线程,一个用于读取,另一个用于写入?