如果我有两个互相了解的客户端(即他们知道要使用哪个端口及其各自的主机名),它们是否可以使用套接字互相连接?在网络中连接两个客户端
我知道一个可以作为服务器运行,一个可以作为客户端运行,但它们都可以作为客户端吗?两个客户端都不在路由器或防火墙之后,每个客户端都有一个唯一的IP。我正在使用Java,所以我想在两个客户端上使用两个Socket实例,而不是一个ServerSocket,另一个是Socket。
如果我有两个互相了解的客户端(即他们知道要使用哪个端口及其各自的主机名),它们是否可以使用套接字互相连接?在网络中连接两个客户端
我知道一个可以作为服务器运行,一个可以作为客户端运行,但它们都可以作为客户端吗?两个客户端都不在路由器或防火墙之后,每个客户端都有一个唯一的IP。我正在使用Java,所以我想在两个客户端上使用两个Socket实例,而不是一个ServerSocket,另一个是Socket。
有人需要监听某处的连接。一个标准的Socket连接连接到一个主机和监听端口(ServerSocket用于标准Java套接字)。默认情况下,ServerSocket会阻塞,等待传入连接。
如果在两个客户端上添加一个ServerSocket连接,您希望有一个线程监听连接,另一个线程试图建立一个传出连接。还有一些替代方法,例如使用NIO,它将允许您检查传入和传出连接而不会阻止整个应用程序。
您也可以看看广播,但是,该解决方案也存在复杂性。
还有一个想法:根据您的要求,您可以始终考虑利用P2P框架,如JXTA。
不,他们只能通过至少在其中一方初始化一个server socket来完成。在其中一个客户端建立连接之后,您可以实现协议从双方写入/读取。 这是“等待”连接的机制,如果客户端套接字未首先被服务器套接字初始化,则无法接收连接。
理念,你为什么不集成在两个客户端小HTTP服务器,让你知道你能坚持到HTTP协议(即:Jetty)
不,你需要一个ServerSocket监听端口并接受连接。
简而言之 - 答案是否定的,您不能将两端用作客户端。没有命令 可让两个套接字相互连接。
使用套接字API创建连接的唯一方法是让一方侦听连接并接受它们,并让另一方连接到它。
通常的解决方案是任意决定一端是服务器,另一端是客户端。 您在服务器端侦听,并在客户端连接。
您可以创建一个ServerSocket,接受一个连接。与只创建一个套接字相比,这增加了一行代码,所以它没有太多的代码开销。
在服务器端
ServerSocket ss = new ServerSocket(port); // can be reused.
Socket s = ss.accept();
既然你只需要一个连接客户端
Socket s = new Socket(hostname, port);
,它可能没有任何更复杂,这。
如果不关心消息的可靠传送,则可以使用无连接UDP协议而不是TCP。
TCP是一种面向连接的协议,因此参与者必须在其他人监听连接时启动连接。