gpt4 book ai didi

sockets - 如何设计一个避免使用监听套接字的点对点应用程序?

转载 作者:行者123 更新时间:2023-12-02 16:06:20 24 4
gpt4 key购买 nike

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

最佳答案

一些澄清和答案:

  1. 路由器不关心或处理端口,这是防火墙的作用,它负责端口转发。我们大多数人家里都有的路由器/防火墙组合设备增加了常见的误解。
  2. 没有 ServerSocket 可以连接两台计算机吗?不可以。您可以使用 UDP(一种无状态、无连接的通信协议(protocol)),但 ServerSocket 的作用是“监听”传入的连接请求,并根据这些请求生成 Socket,从而在两个端点之间创建通信 channel 。 Socket 同时具有输入流和输出流,因此它可以在任一端进行读写操作。此时(一旦建立连接),客户端/服务器之间的区别是任意的,因为 Socket 是双向连接对象,允许双方发送/接收。
  3. 代理怎么样?这难道不允许两台计算机之间在没有 ServerSocket 的情况下进行连接吗?嗯,不,因为执行代理的服务器仍然必须使用 ServerSocket。根据您尝试实现的应用程序,这可能是可行的方法,也可能只是增加开销。即使“其他地方的另一台服务器告诉它们进行连接”,也必须有人监听连接请求,这是 ServerSocket 的工作。
  4. 如果连接发生在已开放的端口上(大多数可公开访问的服务器的端口 <1024 未被防火墙阻止,但存在异常(exception)情况),那么您无需更改防火墙设置即可使连接正常工作。

因此,重申一下,ServerSocket 的唯一作用(就您的问题而言)是监听传入的连接请求,并根据这些请求创建一个 Socket,它是 ServerSocket 之间的双向通信 channel 。两个端点。

要回答“如何设计一个避免使用监听套接字的点对点应用程序?”这个问题,您不需要。对于像 Vuze 这样的软件,该软件同时充当客户端和服务器,因此称为“对等”,而不是单独的“客户端”或“服务器”。在 Vuze 中,每个客户端都是服务器,每个服务器(除了跟踪器)都是客户端。

关于sockets - 如何设计一个避免使用监听套接字的点对点应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7410051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com