1

因此,对于一个项目,我正在使用 Netbeans IDE 中的 Java 制作一个点对点的两人聊天客户端。

我的问题不完全是代码,而是更多关于结构和如何实现的问题。

我想要做的是让客户端打开并ServerSocket监听试图从另一个客户端使用 a 建立的任何连接Socket(这个另一个客户端也应该有一个ServerSocket)所以这个想法是两个客户端都有能力接受一旦客户端打开并能够尝试建立连接,就会建立连接。

无论如何,问题在于ServerSocket.Accept();程序一旦被调用就会阻塞(正确的术语?),直到超时结束。我想要的是ServerSocket只是在后台侦听任何传入连接并在发生这种情况时连接它们,而不会完全禁用程序的功能(即用户能够自己启动连接)?为此,我是否需要为 建立一个单独的线程,ServerSocket一旦建立连接就会被杀死?

此外,一旦建立连接,我如何让程序定期检查输入流Socket以查看是否有来自其他客户端的任何传入消息?

有没有办法可以在一个线程中实现这一点?(我还没有真正深入研究线程)

如果这有点宽泛,我很抱歉。

非常感谢!!

4

1 回答 1

1

ServerSocket 块,就是这样。

但是,如果您只想在两个连接方之间进行点对点通信,仅此而已,那么这种行为不是问题。您只需要两个程序:服务器和客户端。服务器阻塞直到它从客户端获得连接,客户端阻塞直到它获得连接。

如果你想在单线程中实现 Java IO,你应该使用 Java Nio。网上有很多这方面的教程。例如http://tutorials.jenkov.com/java-nio/server-socket-channel.html

此外,您似乎对网络和套接字不是很熟悉,因此使用某些层而不是原始套接字可能是有益的。

也许您应该考虑使用 JeroMQ ( https://github.com/zeromq/jeromq ) 来实现程序之间的通信。

于 2013-06-18T06:57:10.780 回答