Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何让客户端为每个其他客户端创建套接字_Java_Sockets - Fatal编程技术网

Java 如何让客户端为每个其他客户端创建套接字

Java 如何让客户端为每个其他客户端创建套接字,java,sockets,Java,Sockets,我需要帮助想出一个设计,客户连接和沟通与所有其他客户。我认为每个客户机将同时需要一个ServerSocket用于侦听来自其他客户机的传入连接,以及一个用于启动与其他客户机的连接的套接字 我正在本地主机上进行测试,因此如果我使用端口号跟踪连接,我会遇到以下情况: Socket A (OS assigned port: a) initiates connection with ServerSocket B (known port: 2222) Both clients record that con

我需要帮助想出一个设计,客户连接和沟通与所有其他客户。我认为每个客户机将同时需要一个ServerSocket用于侦听来自其他客户机的传入连接,以及一个用于启动与其他客户机的连接的套接字

我正在本地主机上进行测试,因此如果我使用端口号跟踪连接,我会遇到以下情况:

Socket A (OS assigned port: a) initiates connection with ServerSocket B (known port: 2222)
Both clients record that connection (a, 2222) is made
Socket B (OS assigned port: b) initiates connection with ServerSocket A (known port: 1111)
Both clients record that connection (b, 1111) is made
我们每对客户端应该有一个连接,所以上面的连接是浪费的。这就是为什么我考虑自己设置本地端口:场景将更改为连接(11112222)和(22211111),因为第二个是相同的,所以没有保留

这听起来合理吗

我是一个新的套接字,所以它可能是基本的,但有什么想法吗

Map
应该完成这项工作,其中字符串是远程客户端的主机名


如果您需要旧条目过期等功能,请查看Guava
CacheBuilder
类。这将创建一个具有各种行为/功能的自定义映射,以简化缓存的实现。(在本例中为连接缓存)

为什么要求客户端设置其本地端口?客户端、服务器套接字的工作方式有点不同

基本上,当您的客户机彼此交谈时,您得到的是,每个客户机都有一个传入端口(服务器套接字),它将监听其他客户机。当客户端希望连接到其他客户端时,它将始终使用此端口来启动请求。在获得请求后,客户机将简单地接受连接并将其传递给处理逻辑(无论是线程还是NBIO类型的逻辑)。在这种情况下,您不必在任何地方定义本地端口


我认为您试图解决的问题之一是,如果两个客户端之间已经建立了连接,该怎么办?在这种情况下,双方都知道与谁有关联,并且不会建立新的关联。在这种情况下,您需要为双向双工通信实现自己的协议。

现在,我只是在本地主机上进行测试。所以我可以用一个类似的想法,但是有端口,对吗?对于分配给特定端口的特定客户端,客户端必须在启动连接之前设置其套接字的本地端口。这听起来对吗?我可能还有一个后续问题。在你的帮助下,我回去再试了一次。你提到的这个问题正是我需要帮助的。因此,我编辑了这个问题,并将其添加到“协议”之上。我最终使用的解决方案是,在每次连接启动时,您也会发送一条包含客户端ID的消息。这比我想要的要复杂一些,但到目前为止它仍在工作,我很忙。