java - 连接网络中的两个客户端

标签 java sockets networking network-programming

如果我有两个相互了解的客户端(即,它们知道要使用哪些端口和它们各自的主机名),它们可以使用套接字相互连接吗?

我知道一个可以作为服务器运行,一个可以作为客户端运行,但它们都可以是客户端吗?两个客户端都不在路由器或防火墙后面,并且每个客户端都有一个唯一的 IP。

我也在使用 Java,所以我正在考虑在两个客户端上使用两个 Socket 实例,而不是在一个客户端上使用 ServerSocket,在另一个客户端上使用 Socket。

最佳答案

有人需要在某处监听连接。标准套接字连接连接到主机和端口,在该主机和端口上有一个 Activity 监听器(标准 Java 套接字的 ServerSocket)。默认情况下,ServerSocket 会阻塞,等待传入连接。

如果您要在两个客户端上添加一个 ServerSocket 连接,您可能希望一个线程监听连接而另一个线程尝试建立传出连接。有一些替代方案,例如使用 NIO,它允许您检查传入和传出连接而不会阻塞整个应用程序。

您也可以查看广播,但是,该解决方案也很复杂。

还有一个想法:根据您的要求,您总是可以考虑利用 P2P 框架,例如 JXTA。

关于java - 连接网络中的两个客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5434225/

相关文章:

java - Vaadin-Maven-Plugin 找不到目标

java - 在锁定屏幕的情况下运行应用程序时,JobScheduler 作业无法启动

java - JAX-WS、Websphere AS 8.5 和 XML 数字签名

linux - 通过 SSH 连接到 Raspberry Pi,无需端口转发

java - 用 Java 将多台计算机连接到一个大脑

java - 无法在 Java 中使用 DataOutputStream 写入整数

java - socket虽然连接不上,但不抛异常

linux - 多线程中的socket fd

c - 通过TCP接收和发送数据

android - 测试互联网连接 Android