0

我已经开始尝试用 C++ 学习 Winsock,但遇到了一些问题。我首先遵循 MSDN 上的 Winsock 示例(一个基本的客户端-服务器)。 http://msdn.microsoft.com/en-us/library/ms738545(v=vs.85).aspx

当我构建并运行代码时,我得到了输出:

客户端.exe

发送 14 个字节。
连接关闭。

服务器.exe

Server.exe cmd 窗口中没有任何反应。我不知道我做错了什么。我是 Winsock 的新手,但就我在 Server.cpp 文件中调用 tell 而言,accept() 函数永远不会返回。

任何帮助/指针表示赞赏。
在此先感谢,汤姆。

编辑代码可以在上面的 MSDN 链接上找到。在页面上向下滚动以获取客户端和服务器的代码。

4

1 回答 1

1

听起来您的客户端尚未连接到服务器。它连接到某些东西,但可能不是您的服务器。这里有一些我会看的东西:

  1. 在客户端中硬编码服务器 IP 地址。

  2. 服务器仅侦听 IPv4,但客户端将尝试 IPv4 和 IPv6。应该没问题,但我建议在这个阶段消除这种歧义。在客户端,它说 AF_UNSPEC 将其更改为 AF_INET。

  3. 检查端口 27015(可能在 IPv6 上)是否有其他东西在监听。运行 netstat.exe 以查看正在使用的套接字。

  4. 使用普通的旧 telnet 连接到您的服务器。如果它连接,然后键入任何内容并按 Enter,然后查看服务器的行为。

  5. 摆脱shutdown(ConnectSocket, SD_SEND)客户端中的调用。应该没问题,但让我觉得有点不寻常——我从来没有只关闭套接字上的一个方向,当我完全完成套接字时,我总是使用 SD_BOTH。

  6. 您是在同一台机器上运行两个进程,还是中间有代理或防火墙?例如,代理可能会接受您的客户端连接但无法连接到服务器。

祝你好运!

于 2011-01-16T23:13:22.913 回答