首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

简单udp server。解决思路

2012-01-18 
简单udp server。。C/C++ code#include winsock2.h#include windows.h#include stdio.h#pragma commen

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

热点排行