简单udp server。。
- C/C++ code
#include <winsock2.h>#include <windows.h>#include <stdio.h>#pragma comment (lib,"ws2_32")int port = 3423;void main() { WSADATA wsd; int ret = WSAStartup(0x0202, &wsd); int socketServ; struct sockaddr_in serv_addr; struct sockaddr_in client_addr; ZeroMemory(&serv_addr, sizeof(serv_addr)); ZeroMemory(&client_addr, sizeof(client_addr)); int retval; char buff[1024]; socketServ = socket(AF_INET, SOCK_DGRAM, 0); if(socketServ == INVALID_SOCKET) { printf("socket error"); exit(1); } serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(port); serv_addr.sin_addr.s_addr = INADDR_ANY; if(bind(socketServ, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) != 0) { printf("bind err\n"); exit(1); } printf("listen on port: %d\n", port); /* 主循环 */ int sin_size; while(1) { retval = recvfrom(socketServ, buff, sizeof(buff), 0, (struct sockaddr *) &client_addr, &sin_size); printf("Received data from %s\n", inet_ntoa(client_addr.sin_addr)); Sleep(1); } WSACleanup();}为什么结果是不停地输出
Received data from 0.0.0.0
Received data from 0.0.0.0
Received data from 0.0.0.0
Received data from 0.0.0.0
。。。。。。
[解决办法]
sin_size在调用前如果不设置为client_addr得尺寸,则调用会失败
出现这个问题得原因是你根本不检查返回值,估计retval必然返回-1,而此时GetLastError返回10014