数据包转发到目的地,但应用程序没有收到

时间:2013-05-07 06:52:54

标签: c windows sockets

我正在尝试在我的机器上运行一个简单的客户端 - 服务器程序。如果客户端和服务器都在同一系统上,它可以正常工作。但是如果客户端在另一个系统上并且服务器在我的服务器上运行,它就不起作用。它反过来工作。 当我执行netstat命令时,它从客户端SYN_SENT显示,但服务器仍然显示LISTENING。 Wireshark确认它收到了来自客户端的消息,但仍然没有到达服务器的消息。

我在Windows XP上运行。

这是客户端netstat

TCP    si-rohitp:5002         10.221.40.62:5003      SYN_SENT

这是服务器端netstat

TCP    127.0.0.1:1045         0.0.0.0:0              LISTENING
 TCP    127.0.0.1:5152         0.0.0.0:0              LISTENING

2 个答案:

答案 0 :(得分:1)

调用bind时,需要指定将套接字绑定到的地址。如果传入INADDR_ANY,它将绑定到所有设备,因此您将能够从本地和远程主机获取连接。

http://man7.org/linux/man-pages/man7/ip.7.html

答案 1 :(得分:1)

您的服务器程序仅侦听localhost。在进行套接字编程时,您的程序不仅会列入特殊端口,而且还会监听特定的IP地址。如果一个程序监听本地主机,那将导致我的程序永远无法连接到您的计算机外部。重写服务器程序中的代码以侦听其IP地址。您可以借助网络功能查找运行服务器程序的计算机的当前IP地址。

如果您的程序不只是使用套接字进行计算机内部通信,那么您应始终绑定到真实的IP地址。如果您的程序仅使用套接字进行内部通信,则应始终绑定到本地主机,因为安全性较低。

如果您无法访问服务器程序的源代码,并且无法自定义您的服务器程序的行为。