问题在于将recvfrom函数置于一路线程中,而sendto函数置于主线程中。此错误被发现源于Windows socket的一个bug,在UDP Socket发送数据后收到不可达ICMP包时,此错误会在下一次接收时返回,导致recvfrom()函数返回SOCKET_ERROR,错误代码为10045。解决此问题的方法之一是直接忽略这个错误,通过在接收数据的代码...
intrecvData=recvfrom(udpSock,buff,548,0, (structsockaddr*)&peerMng,&nLen); if(SOCKET_ERROR==recvData) { inta=WSAGetLastError(); //if (10054 == a) continue; printf("recvfrom fail\n"); return-1; } elseif(0<recvData) { printf("%s\n",buff); } } } BOOLWINAPICtrFun(DWORDdwTyp...
解决办法: 使用WSAIoctl设置UDP socket的工作模式,让其忽略这个错误。具体做法如下: #include <Winsock2.h>#include<Mstcpip.h>#include<stdio.h>#pragmacomment(lib, "ws2_32.lib")#defineSIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR, 12)BOOL bNewBehavior=FALSE; DWORD dwBytesReturned=0; WSAIoctl(iSock, SIO...
2.初始化地址和端口 3.创建UDP套接字socket 4.绑定端口bind 5.用recvfrom接收数据 6.用sendto发送数据 7.退出或者返回5步骤继续 二、客户端构建步骤 1.初始化套接字环境WSAStartup 2.初始化地址和端口 3.创建UDP套接字socket 4.用sendto发送数据 5.用recvfrom接收数据 三、示例代码 Sever: #include <winsoc...
问题:将recvfrom函数置于一路线程中,sendto函数置于主线程中,当单独运行下面程序时recvfrom()函数出现10054错误。 网上找到的原因:上述现象是Windows socket的一个bug,当UDP Socket在某次发送后收到一个不可到达的ICMP包时,这个错误将在下一个接收中返回,所以上面的套接字在下一次的接收中返回了SOCKET_ERROR,错误...
DWORD dwBytesReturned=0; WSAIoctl(iSock, SIO_UDP_CONNRESET,&bNewBehavior,sizeofbNewBehavior, NULL,0, &dwBytesReturned, NULL, NULL);
UDP-Socket一般流程(Windows) 一、 服务端构建步骤 1.初始化套接字环境WSAStartup 2.初始化地址和端口 3.创建UDP套接字socket 4.绑定端口bind 5.用recvfrom接收数据 6.用sendto发送数据 7.退出或者返回5步骤继续 二、客户端构建步骤 1.初始化套接字环境WSAStartup 2.初始化地址和端口 3.创建UDP套接字socket ...
我们知道 UDP 获取远端地址非常简单,通常接口 recvfrom 就可以直接获取到远端的地址和端口;如果获取 UDP 的本机地址就需要点特殊处理了,特别是本机有多网卡的情况下,我们想知道是那个 IP 接收的 UDP 包。对于 linux 我们知道,现在有了对应的解决方法,就是利用套接字选项 IP_PKTINFO 和 recvmsg 接口,就能轻松完成...
Windows下的UDP Socket编程 简介 Windows下的用VC++6.0这个软件编写的UDP协议的socket编程 工具/原料 笔记本电脑一台 安装了VC++6.0 方法/步骤 1 首先在电脑上安装好VC++6.0。这个网上已经有很多教程了,本文就不多做介绍了。2 了解一下网络知识,TCP,UDP以及SOCKET是什么。其实socket就是一个五元组,网络协议...
A使用UDP socket,调用sendto()函数向B发送数据,但是B没有接收数据发送端口不可达的ICMP报文,之后A...