我有一个使用TCP连接进行通信的服务器 - 客户端程序 . 多个客户端可以同时连接到服务器 . 我想在这个系统上实现tcp打孔 .
在客户端,它调用公共服务器来查找我的服务器的公共IP端口 . 然后连接到它 .
但是在服务器端,它必须打开一个端口来连接到公共服务器,它还必须接受同一端口上的客户端连接请求 .
我要做的是打开套接字并绑定到端口X,然后连接到公共服务器,然后将此套接字更改为侦听状态以接受传入连接一段时间,然后再次开始连接到公共服务器并结束 .
这是正确的方法吗?
编辑:我有另一个想法 . 它是打开一个新端口并连接到公共服务器 . 主服务器端口像往常一样正在侦听传入连接 . 当客户端想要连接时,公共服务器将通过新端口告诉我的服务器 . 它会阻止主端口监听传入连接,而是会连接到客户端进行打孔 . 然后它连接到公共服务器,它将服务器公共IP地址转发到客户端,然后像往常一样回去监听传入连接 . 然后,客户端将使用此地址连接到已打开TCP孔的服务器 .
1 回答
最好有两个套接字并维护服务器和客户端之间的连接 .
m_nServerTCPSocket-用于连接和列表器套接字与服务器
m_nPeerPrivateTCPSocket-与对等方连接(公共地址)
m_nPeerPublicTCPSocket-与对等体连接(如果其他对等体在同一网络中,则为私有地址)
m_nListeningTCPSocket - 用于监听同伴的套接字你需要接受来自peer的连接 .
m_nConnectedPeerTCPSocket->一旦与其他对等方连接,就会得到此套接字 .
创建套接字的逻辑