我已经开始尝试用 C++ 学习 Winsock,但我遇到了一些问题。 我首先遵循 MSDN 上的 Winsock 示例(一个基本的客户端-服务器)。 http://msdn.microsoft.com/en-us/library/ms738545(v=vs.85).aspx
当我构建并运行代码时,我得到了输出:
客户端.exe
已发送 14 个字节。
连接关闭。
Server.exe
Server.exe cmd 窗口中没有任何反应。 我不知道我做错了什么。我是 Winsock 的新手,但就我在 Server.cpp 文件中调用 tell 而言,accept() 函数永远不会返回。
感谢任何帮助/指点。
提前致谢,汤姆。
编辑 代码可以在上面的 MSDN 链接中找到。在页面上向下滚动以获取客户端和服务器的代码。
最佳答案
听起来您的客户端尚未连接到服务器。它连接到某物,但可能不是您的服务器。以下是我要查看的一些内容:
在客户端中硬编码服务器 IP 地址。
服务器仅监听 IPv4,但客户端将同时尝试 IPv4 和 IPv6。应该没问题,但我建议在这个阶段消除这种歧义。在客户端中,将 AF_UNSPEC 更改为 AF_INET。
检查端口 27015(可能在 IPv6 上)是否有其他监听。运行 netstat.exe 以查看正在使用的套接字。
使用普通的旧式 telnet 连接到您的服务器。如果连接成功,则输入任何内容并按回车键,然后查看服务器的行为。
摆脱客户端对
shutdown(ConnectSocket, SD_SEND)
的调用。它应该没问题,但它让我觉得有点不寻常 - 我从来没有关闭一个套接字上的一个方向,我总是在完全完成套接字时使用 SD_BOTH。您是在同一台机器上运行这两个进程,还是中间有代理或防火墙?例如,代理可能会接受您的客户端连接但无法连接到服务器。
祝你好运!
关于C++ Winsock - 接受(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4707962/