如何设计避免使用侦听套接字的对等应用程序?

时间:2011-09-14 00:34:23

标签: sockets networking

我注意到如果你想编写一个使用监听套接字的应用程序,你需要在你的路由器上创建端口转发规则。如果我想连接两台计算机而没有其中一台计算机搞乱路由器设置,有没有办法可以让两个客户端相互连接而不使用任何一个使用侦听套接字?在其他地方需要另一台服务器告诉他们连接但是可能吗?

3 个答案:

答案 0 :(得分:4)

一些澄清和答案:

  1. 路由器不关心或处理端口,这是防火墙的角色,它执行端口转发。我们大多数人在家中使用的路由器/防火墙组合设备增加了常见的误解。
  2. 你可以连接两台没有ServerSocket的电脑吗?不可以。您可以使用UDP(无状态,无连接通信协议),但ServerSocket的作用是“监听”传入的连接请求,并根据这些请求生成Socket,从而在两个端点之间创建通信通道。 Socket同时具有InputStream和OutputStream,因此它可以在两端写入时进行读取。此时(一旦建立连接),客户端/服务器之间的区别是任意的,因为Socket是双向连接对象,允许双方发送/接收。
  3. 代理怎么样?是否允许没有ServerSocket的两台计算机之间的连接?嗯,不,因为正在进行代理的服务器仍然必须使用ServerSocket。根据您尝试实施的应用程序,这可能是要走的路,或者可能只是增加开销。即使有“其他服务器在其他地方告诉他们连接”,也有人必须监听连接请求,这是ServerSocket的工作。
  4. 如果通过已打开的端口发生连接(大多数可公开访问的服务器的端口<1024不被防火墙阻止,但存在例外情况),则您不需要更改防火墙设置以使连接正常工作。
  5. 因此,重申一下,ServerSocket的ONLY角色(就您的问题而言)是监听传入的连接请求,并从这些请求中创建一个Socket,这是一个双向通信通道。两个终点。

    要回答这个问题,“我如何设计避免使用侦听套接字的点对点应用程序?”,但事实并非如此。在像Vuze这样的情况下,该软件同时充当客户端和服务器,因此单独使用术语“对等”,而不是“客户端”或“服务器”。在Vuze中,每个客户端都是一个服务器,每个服务器(跟踪器除外)都是客户端。

答案 1 :(得分:2)

如果您需要两台计算机之间的TCP连接,并且它们都在路由器后面(并且您不想设置端口转发),我认为您唯一的另一种可能性是在某个地方安装第三台服务器在运行ServerSocket的防火墙后面,接受2台其他计算机之间的连接以及代理2之间的通信。无法在没有一个监听套接字而另一个连接到套接字的情况下在2之间建立TCP连接。

答案 2 :(得分:0)

  

问:如果我想连接两台没有任何一台计算机的计算机   计算机搞乱路由器设置,有没有办法让我   可以让两个客户端相互连接

是:让服务器监听开放端口:)

相关问题