小编Heo*_*wyn的帖子

Windows UDP套接字:recvfrom()失败,错误10054


大家好.
我正在尝试使用Windows套接字来发送和接收UDP数据包(在C++中).
它运作良好,直到三天前程序停止正常运行.
总结一下情况:

  • 在我的套接字上调用WSAPoll()时,它总是返回我的套接字更新,即使没有服务器启动,也可以使用每个事件(对应于我给polveld的每个事件).
  • 当调用recvfrom()并且没有启动服务器时,它返回SOCKET_ERROR,错误代码为10054(*).
  • 当调用recvfrom()并启动服务器时,它可以正常工作 - 阻塞直到它收到一些东西.
  • 无论我尝试连接到localhost还是远程主机,行为都是一样的.

(*)我调查了这个错误.在UDP中,这意味着存在ICMP问题.("在UDP数据报套接字上,此错误表示先前的发送操作导致ICMP端口无法访问消息.").
我确实在recvfrom()之前调用了sendto(),所以问题不在这里.
我试图放下我的防火墙,看它是否改变了什么,但事实并非如此.我还试图放下流经我电脑的每个网络.在这种状态下,我设法使程序工作了几分钟,但是当我启用网络时它再次停止工作.我试图重复这个过程,但它不再适用了.
我尝试使用visual studio(2015)和MinGW进行编译.
我也尝试了另一台计算机(在Windows 7下,我的Windows 8.1),无济于事.

这是一个简单的测试文件,在我的计算机上不起作用.

#undef _WIN32_WINNT
#define _WIN32_WINNT 0x501
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <vector>
#include <iostream>

int main() {
  int clientSock;
  char buf[100];
  int serverPort;

  /* Initializing WSA */
  WSADATA wsaData;
  WSAStartup(MAKEWORD(2, 2), &wsaData);

  /* I create my socket */
  struct addrinfo specs;
  struct addrinfo *addr = new addrinfo;
  ZeroMemory(&specs, sizeof(specs));
  specs.ai_family = AF_INET;
  specs.ai_socktype = SOCK_DGRAM;
  specs.ai_flags = 0;
  getaddrinfo("127.0.0.1", "2324", …
Run Code Online (Sandbox Code Playgroud)

c++ sockets windows udp

6
推荐指数
1
解决办法
5919
查看次数

标签 统计

c++ ×1

sockets ×1

udp ×1

windows ×1