0

我正在尝试在我的机器上运行一个简单的客户端-服务器程序。如果客户端和服务器都在同一个系统上,它工作正常。但是,如果客户端在另一个系统上并且服务器在我的系统上运行,它就不起作用。它反过来工作。当我执行 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
4

2 回答 2

1

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

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

于 2013-05-07T08:09:15.910 回答
1

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

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

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

于 2013-05-07T21:16:42.870 回答