繁体   English   中英

在C中接收UDP数据包

[英]Receiving UDP packets in C

我一直试图在ms visual studio 2008中使用winsock2包来做这个,但每当我尝试解析输入的IP地址,这是有效的,我得到一个“无效的IP ...”错误。 我唯一的猜测是有一些权限错误,但我真的不知道什么是错的。 请帮忙!

if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0){
    error("WSAStartup() failed\n\r");
}

// validate port
if( port <= 0 || port > 65535){
    sprintf(msg, "Invalid port - %d. Ports must be between 0 and 65536\n\r",
                    port);
    error(msg);
}

// validate ip
    inet_addr = inet_addr(ip);
if( inet_addr == INADDR_NONE){
    sprintf(msg, "Not an ip - %s\n\r", ip);
    error(msg);
} else {
        info = gethostbyaddr((char*)&inet_addr, 4, PF_INET);
    if(info == NULL){
        sprintf(msg, "Invalid ip - %s\n\r", ip);
        error(msg);
    }
}

你需要链接ws2_32.lib

#pragma comment(lib, "ws2_32.lib")

或者将其作为附加链接器输入放在项目配置中。

检查您是否链接到ws2_32.lib。 我相信这就是你所需要的。

除非有令人信服的理由保持Winsock 2.0兼容级别(在非常旧版本的Windows上运行;使用依赖于旧Winsock行为的其他代码等),否则您可能还需要考虑更改:

if(WSAStartup(MAKEWORD(2,0),&wsaData)!= 0){

if(WSAStartup(MAKEWORD(2,2),&wsaData)!= 0){

2.2是Winsock API的最新版本。

端口号sin_port也需要按网络字节顺序排列,否则你将把你的套接字绑定到一个与你想象的完全不同的端口。 使用htons()并查看其他示例。

(这仅适用于小端系统,但无论如何都是个好主意。大多数Windows系统都是小端的。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM