【发布时间】:2026-01-26 03:45:01
【问题描述】:
我编写了一个简单的 TCP Server 程序,用于接收来自客户端的数据。我的 main() 方法如下所示:
Acceptor acceptor = Acceptor.open(new InetSocketAddress(port));
Session session = acceptor.accept(); //accepts connection from client and returns session object
FIXSession transport = session.getTransport();
String str = transport.receive(); // receives data from client
doWork(str); // do the remaining process.
在上面的代码中,我尝试使用“transport.receive()”方法从客户端接收数据。如果假设客户端需要一些时间来发送数据,同时我的主程序将进入下一步“doWork(str);”结果为空。如何让 main() 线程等到我从客户端收到数据。将来我可能会在其他线程中运行 doWork(str) 方法。所以我需要让 doWork(str) 线程等到我从客户端获取数据。有什么办法吗?
【问题讨论】:
-
您需要提供有关您的代码的更多信息。接收方法的代码是什么?
-
如果您使用的是 API,我正在查看“项目:费城”transport.receive 返回字节数。看起来你需要设置一个消息监听器。
-
是的,我正在使用费城。即使它返回字节数,如果接收到的字节数小于0,那么它必须等到接收到的字节数大于0。但它只是跳转到下一步。我希望它等到客户端将数据发送到服务器。也就是说接收到的字节数应该大于零。
-
实际上receive函数只返回str。我修改了源代码以返回一个字符串。我没有在我的代码中检查你的过程。我明天会做的。然后我可以投票给你的答案。到目前为止,您的答案最适合我。谢谢
-
好吧,至少我在FIXSession 看到的不是这个。此方法返回一个 int,而不是字符串。也许你应该澄清你的问题并指出你正在使用的那个库的确切版本。
标签: java multithreading client-server nio