1

http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/126639f1-487d-4755-af1b-cfb8bb64bdf8に投稿されたコードを使用していますが、最初の投稿。ソリューションで言うようにWSAGetLastError()を使用して、何が問題なのかを見つけるにはどうすればよいですか?

私は次のことを試しました:

  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

4

1 に答える 1

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バイトを正常に送信したことを示します。

sendbuf以下で説明するように、これは変数のサイズであるため、4バイトしか送信しません(これはポインターであり、バッファーではありません)。の文字列sendbufがnullで終了している場合は、strlen()代わりに使用できます。そうでない場合は、おそらく文字列長パラメータをIRC::SendBuf()それ自体に追加する必要があります。

于 2010-11-28T07:31:20.083 に答える