聊天客户端 - 兼容套接字和服务器套接字

时间:2013-06-18 06:40:43

标签: java multithreading sockets serversocket

因此,对于一个项目,我在Netbeans IDE中使用Java进行了一次点对点,两个人聊天客户端。

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

我想要做的是让客户端打开并让ServerSocket监听任何尝试使用Socket从另一个客户端进行的连接(这个其他客户端也应该有一个ServerSocket) 因此,我们的想法是,一旦客户端打开并且能够尝试建立连接,两个客户端都能够接受连接。

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

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

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

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

非常感谢!!

2 个答案:

答案 0 :(得分:1)

ServerSocket阻止,就是这样。

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

如果要在单线程中实现Java IO,则应使用Java Nio。互联网上有很多教程。例如http://tutorials.jenkov.com/java-nio/server-socket-channel.html

此外,您似乎并不熟悉网络和套接字,因此使用某个层而不是原始套接字可能会有所帮助。

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

答案 1 :(得分:1)

如果您希望向所有已连接的客户端发送消息,则此link可能对您有帮助。