对于我的 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/