簡體   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