2010-11-28 6 views
1

http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/126639f1-487d-4755-af1b-cfb8bb64bdf8에 게시 된 코드를 사용하고 있지만 첫 번째 게시물에있는 것처럼 데이터를 보내지는 않습니다. 무엇이 잘못되었는지를 솔루션에서 말하는 것처럼 WSAGetLastError()를 어떻게 사용합니까?Winsock IRC 클라이언트가 연결했지만 데이터를 보내지 않습니다.

void IRC::SendBuf(char* sendbuf) 

    { 

     int senderror = send(m_socket, sendbuf, sizeof(sendbuf), MSG_OOB);  

    if(senderror == ERROR_SUCCESS) { 
      printf("Client: The test string sent: \"%s\"\n", sendbuf); 
    } 
    else { 
      cout << "error is: " << senderror << ", WSAGetLastError: " << WSAGetLastError() << endl;  
    printf("Client: The test string sent: \"%s\"\n", sendbuf); 

    } 
    } 

그리고 출력은 다음과 같습니다 :

나는 다음과 같은 시도 오류가 있습니다 : 4, WSAGetLastError : 0

답변

0

당신은 그것을 호출하는 대신 WSAGetLastError의 주소를 평가하고 있습니다. 당신은 실제로 그 함수를 호출하기 위해 괄호를 추가해야합니다

void IRC::SendBuf(char* sendbuf) 
{ 
    int senderror = send(m_socket, sendbuf, strlen(sendbuf), 0); 
    if (senderror != SOCKET_ERROR) { 
     printf("Client: The test string sent: \"%s\"\n", sendbuf); 
    } else { 
     cout << "Error is: " << WSAGetLastError() << endl; 
    } 
} 

편집 :send() 기능이 쓴 바이트 수없는 오류 코드를 반환합니다. 위의 업데이트 된 코드에서와 같이 반환 값을 SOCKET_ERROR에 대해 테스트해야합니다. 귀하의 경우, send()은 4 바이트를 성공적으로 전송했다고 알립니다.

아래에 적어 두었지만변수의 크기 (버퍼가 아니라 포인터 임)이기 때문에 4 바이트 만 보냅니다. sendbuf의 문자열이 null로 종료되는 경우 strlen()을 대신 사용할 수 있습니다. 그렇지 않은 경우 문자열 길이 매개 변수를 IRC::SendBuf() 자체에 추가해야합니다.

+0

이제 0이 인쇄됩니다. 여기에 나열된 코드 중 하나를 받아야합니까? http://msdn.microsoft.com/en-us/library/ms740668%28VS.85%29.aspx#winsock.wsaeshutdown_2 – thorvald

+0

@thorvald, 반드시 필요한 것은 아닙니다. 오류 '0'은 '오류 없음'을 의미합니다. 즉 모든 것이 원활하게 진행되었습니다. 이전 소켓 호출이 실패 했어야한다고 생각하는 이유는 무엇입니까? –

+0

연결 후 서버에 아무 것도 보내지 않았기 때문에 뭔가 잘못되었다고 생각했습니다. 이 페이지의 코드를 사용하고 있습니다. http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/126639f1-487d-4755-af1b-cfb8bb64bdf8하지만 원래의 포스터는 어떻게 수정했는지 말하지 않았습니다. 문제. – thorvald

관련 문제