2014-04-14 11 views
0

클라이언트와 동일한 컴퓨터에서 실행되는 서버 응용 프로그램과의 간단한 연결을 설정하려고합니다.winsock 연결 방법에서 오류 10038

내 코드는 다음과 같습니다

void Base::Connect(string ip, string port) 
{ 
    int status; 
    SOCKET ConnectSocket = INVALID_SOCKET; 
    struct addrinfo hints; 
    struct addrinfo *servinfo; // will point to the results 

    memset(&hints, 0, sizeof hints); // make sure the struct is empty 
    hints.ai_family = AF_UNSPEC;  // don't care IPv4 or IPv6 
    hints.ai_socktype = SOCK_STREAM; // TCP stream sockets 

    // get ready to connect 
    status = getaddrinfo(ip.c_str(), port.c_str(), &hints, &servinfo); 

    // Socket Setup 
    if (ConnectSocket = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol) == INVALID_SOCKET) 
    { 
     printf("[NETWORKING] An error occured when setting up socket\n"); 
    } 

    // Connect 
    if (connect(ConnectSocket, servinfo->ai_addr, (int)servinfo->ai_addrlen) == SOCKET_ERROR) 
    { 
     int error = WSAGetLastError(); 
     printf("Connect error: ", error); 
    } 
} 

미리, 나는 WSAStartup()를 호출하고이 오류가 발생하지 않습니다. 서버가 켜져 있거나 꺼져 있으면 오류가 변경되지 않습니다.

내가 사용하는 IP는 127.0.0.1이고 포트 80을 통해 연결됩니다. 다른 오류 (1337)로 인해 동일한 오류가 발생했습니다.

분명히 잘못된 것이 있습니까? 무엇이 잘못 될지에 대한 아이디어가 있습니까?

+0

WSAENOTSOCK의 목록을 참조하십시오. 소켓 생성시 괄호 오류가 있습니다 – deviantfan

+0

어디에 괄호 오류가 있습니까? 실제 socket() 메서드로 아무 것도 잘못 찾지 못했습니다 – Dries

+0

아래의 답은 – deviantfan

답변

2
if (ConnectSocket = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol) == INVALID_SOCKET) 

멋져요 INVALID_SOCKET
에 소켓 (...)를 비교 한 후 개봉 된이 ConnectSocket에 결과가 참/거짓 할당.
사용

if ((ConnectSocket = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol)) == INVALID_SOCKET) 

는 C++ 연산자 우선 순위

+0

해결되었습니다 (정답으로 표시하기 위해 7 분을 대기)하지만 이제는 10061 (능동적으로 거부 됨 ...)을 던집니다. 나는 서버가 그럭저럭 달리고있다. – Dries

+0

WSAECONNREFUSED : 일반적으로 다음 중 하나입니다. a) 지정된 포트에 서버 프로그램이 없습니다. b) 방화벽 설정. – deviantfan

+0

방화벽을 종료했지만 여전히 10061 오류가 반환되며 포트는 동일합니다 (80). 좀 더 살펴보고 나중에 새로운 질문을 만듭니다. 도움을 주셔서 감사합니다 – Dries