【发布时间】:2012-08-09 00:51:05
【问题描述】:
我正在尝试创建一个在两台远程计算机之间交换消息的简单应用程序。 使用“127.0.0.1” ip 它可以正常工作,等待客户端的确认并连接到客户端,但是如果我尝试使用相同端口的本地“192.168.0.15”或我的全局 ip,服务器会立即连接到某事而无需等待客户。
这是我的服务器代码的一部分:
char ip[20] = "127.0.0.1"; int port = 19385;
SOCKET sockListen, sockConnect;
SOCKADDR_IN address;
sockConnect = socket (AF_INET, SOCK_STREAM, NULL);
address.sin_addr.s_addr = inet_addr (ip);
address.sin_family = AF_INET;
address.sin_port = htons (port);
sockListen = socket (AF_INET, SOCK_STREAM, NULL);
bind (sockListen, (SOCKADDR*)&address, AddressSize);
listen (sockListen, SOMAXCONN);
sockConnect = accept (sockListen, (SOCKADDR*)&address, &AddressSize);
...
请提出解决问题的方法。谢谢
【问题讨论】:
-
你为什么不尝试使用 boost.Asio。你会省去很多麻烦。
-
不应该将
sockConnect = socket (AF_INET, SOCK_STREAM, NULL);这一行初始化sockListen而不是sockClient吗? -
sockListen 也在下面初始化。顺序无关紧要
-
@Caesar 我猜是因为他想使用winsock。仅仅因为有一个库可以做某事并不意味着你应该使用它。了解原生 API 会有很长的路要走。