我正在用C ++构建虚拟P2P应用程序,并且在概念上有疑问。 (我是一个完全的网络初学者。)
我的客户端A创建一个套接字并连接到服务器。另一个客户端B来询问服务器有关客户端A的IP和端口的信息。客户端B现在想直接与A打开连接。我在客户端A中创建了另一个线程,该线程想监听传入的连接请求。请通过这些观点验证我的理解。
我在客户端A中创建套接字以与服务器建立连接后所拥有的文件描述符只能由服务器用于对其进行读写。
客户端B发送到A的连接请求将在其他队列中结束,该队列需要单独处理,并且对于客户端A已经具有的连接是不可见的。基本上,这意味着进入文件描述符的内容将通过关联的端口,但是进入端口的内容可能不会进入文件描述符。仅从正确的来源。
客户端A需要创建一个与上一个端口和地址绑定在一起的新套接字,以处理传入的请求。
最佳,
TCP是点对点连接,它只能用于从应用程序到另一个应用程序的单个连接。如果要接受传入连接,则需要第二个套接字(被动,侦听),该套接字用作其他应用程序的连接点。当另一个应用程序连接到此(被动,侦听)套接字时,您会得到一个用于实际连接的third套接字。
所以:
是
是
您从A到服务器的连接可以使用任何任意端口。 A中的(被动,侦听)套接字需要绑定到应用程序B连接到的“知名”端口。