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

时间:2013-08-20 11:21:38

标签: java networking

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

变量inObjectInputStreamoutObjectOutputStream

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)之前等待来自服务器的内容。我应该如何构建我的代码,以便我可以随时发送内容并随时收到内容?我希望你明白。

2 个答案:

答案 0 :(得分:2)

您可以使用线程。如果他们使用相同的套接字与外部服务器通信,这很常见,因为他们在等待从套接字读取时不会阻塞。

线程1:

阻止阅读 收到消息 - 做点什么

线程2: 做事 发生的事情 - 写入套接字

答案 1 :(得分:1)

dp = (DataPackage) in.readObject();正在阻止。这意味着在收到服务器的回复之前,它不会完成下面的行的执行。

一个建议,创建一个新线程并传递dp = (DataPackage) in.readObject();的实例,这样它就不会阻塞。