Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 服务器无法检索发件人端口和IP_Sockets_Networking - Fatal编程技术网

Sockets 服务器无法检索发件人端口和IP

Sockets 服务器无法检索发件人端口和IP,sockets,networking,Sockets,Networking,设置: 1) 笔记本电脑连接到我家网络中的路由器。我没有ip域名。 我在路由器上有端口转发,将端口40000转发到笔记本电脑A。 笔记本电脑A是监听端口40000的“服务器” 2) 我将笔记本电脑B连接到同一路由器。我在B上运行一个“客户端”。它创建了一个套接字 (Udp)具有自己的端口45000,连接到服务器(域名和端口40000)并发送消息。笔记本电脑接收数据。一切都很好 3) 但当我试图在readmessag(..)中捕获笔记本电脑B(发送者)的地址和端口时,它会给我路由器的IP地址(71

设置: 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工具包

//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?