c++ - 在 UDP 套接字中使用 Connect()、send()、recv 时出现问题

标签 c++ c winsock2

对于我的 Uni 任务,我必须创建一个快节奏的网络游戏,因此选择使用 UDP 而不是 TCP。我知道 UDP 和 TCP 编程的很多差异,并且已经通读了 MSDN 关于 winsock 的文档的大部分相关部分。在 MSDN 上,它指出通过 connect() 函数创建 UDP 套接字应该将套接字绑定(bind)到指定的地址和端口,因此能够对创建的套接字使用 send() 和 recv() 函数。

对于我的应用程序,我创建了一个客户端并使用 connect() 使用环回地址,该地址通过 send() 函数发送多个数据包。客户端在调用 select() 之后,然后接收它发出的数据包。然而,我从 recv() 函数得到的结果是 SOCKET_ERROR,使用 WSAGetLastError() 的错误描述是“现有连接被远程主机强行关闭”。

如果我使用 bind() 函数并使用 sendto() 通过环回地址发送数据,我 recv() 数据包没有任何错误......有谁知道为什么 connect() 函数没有做它应该做的事应该这样做,有没有人能够将 UDP 套接字与 connect() 函数一起使用?

最佳答案

如果您希望您的程序接收 UDP 数据包,则需要调用 bind()。如果您调用 send(),connect() 仅设置套接字将数据包发送到的地址;它不会将套接字与要接收的本地 UDP 端口相关联;为此,您必须调用 bind()。

关于c++ - 在 UDP 套接字中使用 Connect()、send()、recv 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4487002/

相关文章:

c++ - 如何将文件中的数据放入 QTable Widget Item 中?

c - Linux 上的调制解调器安全

c++ - Winsock 中 SOCKET 对象的范围是什么?

c - 是否有可能无法收到 WSASend 调用的完成信息?

c++ - 在 C++ 中继承友元运算符

c++ - 在变量中存储异构类类型

c++ - 需要声明而不是 ""

c - 使用大页面分配的内存是否有限制?

c# - 从VS2013切换到VS2015后程序不运行

c++ - 用 C++ 创建一个基本的 UDP 聊天程序