Sockets 服务器无法检索发件人端口和IP
设置: 1) 笔记本电脑连接到我家网络中的路由器。我没有ip域名。 我在路由器上有端口转发,将端口40000转发到笔记本电脑A。 笔记本电脑A是监听端口40000的“服务器” 2) 我将笔记本电脑B连接到同一路由器。我在B上运行一个“客户端”。它创建了一个套接字 (Udp)具有自己的端口45000,连接到服务器(域名和端口40000)并发送消息。笔记本电脑接收数据。一切都很好 3) 但当我试图在readmessag(..)中捕获笔记本电脑B(发送者)的地址和端口时,它会给我路由器的IP地址(71.XX.YY.ZZ)和1024端口。我想它会给发送方IP地址(比如192.x.y.z和45000端口) 如何从A-->B连接和交换消息?(我希望我能从最初的消息中获得客户端端口的IP,然后回复并建立双向通信。)断开连接在哪里? -----我正在使用Qt工具包Sockets 服务器无法检索发件人端口和IP,sockets,networking,Sockets,Networking,设置: 1) 笔记本电脑连接到我家网络中的路由器。我没有ip域名。 我在路由器上有端口转发,将端口40000转发到笔记本电脑A。 笔记本电脑A是监听端口40000的“服务器” 2) 我将笔记本电脑B连接到同一路由器。我在B上运行一个“客户端”。它创建了一个套接字 (Udp)具有自己的端口45000,连接到服务器(域名和端口40000)并发送消息。笔记本电脑接收数据。一切都很好 3) 但当我试图在readmessag(..)中捕获笔记本电脑B(发送者)的地址和端口时,它会给我路由器的IP地址(71
//SERVER CODE EXCERPT
udpSocket = new QUdpSocket();
int retbind=udpSocket->bind(QHostAddress::Any,40000);
//SERVER reads message from Client (code for checking pending datagrams not shown)
udpSocket->readDatagram(datagram.data(), datagram.size(),&senderIp, &senderPort);
谢谢,你用什么语言做这件事?请看我的评论。我使用C/C++和Qt工具套件,而不是使用无IP名称,使用您的计算机名或本地IP地址,它将按照您的预期工作。这是因为互联网是如何运作的。您的网络正在进行网络地址转换(NAT),因此您的路由器就是您的internet ip地址。路由器作为中间人将数据包发送到正确的本地计算机。阅读更多关于NAT的信息:我的客户机发送到分配的ip地址“71.x.y.z”。我不使用noip域名(到目前为止,我计划稍后用它进行测试)。问题是为什么端口号是“1024”,而不是我的客户端正在使用的45000(在客户端套接字创建调用中)。该端口是客户端将要使用的端口,对吗?那么您在步骤2中没有使用域名连接到服务器A?