[英]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.