读书人

简单udp server。解决思路

发布时间: 2012-01-18 00:23:26 作者: rapoo

简单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

读书人网 >VC/MFC

热点推荐