因此,对于一个项目,我正在 Netbeans IDE 中使用 Java 制作一个点对点两人聊天客户端。
我的问题不完全是代码,而是更多关于结构和如何实现。
我想要做的是让客户端打开并有一个 ServerSocket
监听尝试使用 Socket
从另一个客户端建立的任何连接(这个另一个客户端也应该有一个 ServerSocket
)
因此,我们的想法是,一旦客户端打开,两个客户端都能够接受连接,并且能够尝试建立连接。
无论如何,问题是 ServerSocket.Accept();
一旦调用程序就会阻塞(正确的术语?)直到超时结束。我想要的是 ServerSocket 只是在后台监听任何传入连接,并在出现这种情况时连接它们,而不会在发生这种情况时完全禁用程序的功能(即用户能够自己启动连接)?
为此,我是否需要为 ServerSocket
创建一个单独的线程,该线程在连接建立后就会被终止?
此外,一旦建立连接,如何让程序定期检查Socket
的输入流以查看是否有来自其他客户端的传入消息?
有没有办法可以在单线程中实现此目的? (我还没有真正深入研究线程)
如果这有点宽泛,我很抱歉。
非常感谢!!
最佳答案
ServerSocket 阻塞,仅此而已。
但是,如果您只想在两个连接方之间进行点对点通信,仅此而已,那么这种行为就不是问题。您只需要两个程序:服务器和客户端。服务器阻塞直到它从客户端获得连接,客户端阻塞直到它获得连接。
如果你想在单线程中实现Java IO,你应该使用Java Nio。互联网上有很多这方面的教程。例如http://tutorials.jenkov.com/java-nio/server-socket-channel.html .
此外,您似乎对网络和套接字不太熟悉,因此使用某些层而不是原始套接字可能会更有好处。
也许您应该考虑 JeroMQ ( https://github.com/zeromq/jeromq ) 来实现程序之间的通信。
关于java - 聊天客户端 - 同时使用套接字和服务器套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17162110/