2009-11-12 9 views
2

ms visual studio 2008에서 winsock2 패키지를 사용하여이 작업을 시도했지만 유효 한 입력 IP 주소를 해결하려고 할 때마다 "잘못된 IP ..."오류가 발생합니다. . 내 유일한 추측은 일부 권한 오류가 있다는 것입니다,하지만 난 아무런 단서가 잘못 됐어. 도와주세요!C에서 UDP 패킷 수신

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

또는 추가 링커 입력으로 프로젝트 구성에 넣어 :

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); 
    } 
} 

답변

4

당신은 ws2_32.lib에 연결해야합니다.

2

ws2_32.lib에 링크하고 있는지 확인하십시오. 나는 그것이 당신이 필요로하는 것이라고 믿습니다.

1

Winsock 2.0 호환성 수준 (이전 버전의 Windows에서 실행 중이고 이전 Winsock 동작 등을 사용하는 다른 코드 사용)에 머물러야하는 특별한 이유가없는 한 다음을 변경하는 것이 좋습니다.

경우 (WSAStartup에 (MAKEWORD (2,0), & WSADATA)! = 0) {

경우에 (WSAStartup에 (MAKEWORD (2,2), & WSADATA)! = 0) {

2.2 Winsock API의 최신 버전입니다.

1

포트 번호 sin_port도 네트워크 바이트 순서 여야합니다. 그렇지 않으면 소켓이 생각한 것과 완전히 다른 포트에 바인딩됩니다. htons()를 사용하고 다른 예제를 참조하십시오.

(리틀 엔디안 시스템에만 적용되지만 어쨌든 좋은 생각입니다. 대부분의 Windows 시스템은 리틀 엔디안입니다.)

관련 문제