2010-11-28 10 views
1

Ich benutze den Code auf http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/126639f1-487d-4755-af1b-cfb8bb64bdf8, aber es sendet keine Daten, wie es im ersten Beitrag sagt. Wie verwende ich WSAGetLastError(), wie es in der Lösung heißt, um herauszufinden, was falsch ist?Winsock IRC-Client verbindet, sendet aber keine Daten

Ich habe versucht, die folgenden:

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

    } 
    } 

Und der Ausgang ist: Fehler: 4, WSAGetLastError: 0

Antwort

0

Sie die Adresse des WSAGetLastError, anstatt sie zu nennen auswertet. Sie müssen Klammern hinzuzufügen, um tatsächlich diese Funktion aufrufen:

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

EDIT: Die send() Funktion gibt die Anzahl der geschriebenen Bytes, nicht ein Fehlercode. Sie müssen den Rückgabewert gegen SOCKET_ERROR wie in dem aktualisierten Code oben testen. In Ihrem Fall teilt send() mit, dass es erfolgreich 4 Bytes gesendet hat.

Wie Sie unten notiert haben, sendet es nur 4 Bytes, weil das die Größe der sendbuf Variable ist (es ist ein Zeiger, kein Puffer). Wenn die Zeichenfolge in sendbuf nullterminiert ist, können Sie stattdessen strlen() verwenden. Wenn dies nicht der Fall ist, sollten Sie wahrscheinlich einen String-Längenparameter zu IRC::SendBuf() selbst hinzufügen.

+0

Jetzt wird 0 gedruckt. Sollte ich nicht einen der hier aufgeführten Codes erhalten? http://msdn.microsoft.com/en-us/library/ms740668%28VS.85%29.aspx#winsock.wsaeshutdown_2 – thorvald

+0

@thorvald, nicht unbedingt. Fehler "0" bedeutet "kein Fehler", d.h. alles lief glatt ab. Was lässt Sie vermuten, dass der vorherige Socket-Aufruf fehlgeschlagen sein sollte? –

+0

Weil es nach dem Verbinden nichts an den Server gesendet hat, dachte ich, dass etwas schief gelaufen ist. Ich benutze den Code von dieser Seite: http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/126639f1-487d-4755-af1b-cfb8bb64bdf8, aber das Original-Poster hat nicht gesagt, wie er es behoben hat das Problem. – thorvald