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

  }
  }

输出为:error is: 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 个字节。

正如您在下面提到的,它只发送 4 个字节,因为这是sendbuf变量的大小(它是指针,而不是缓冲区)。如果 in 中的字符串以sendbufnull 结尾,则可以strlen()改用。如果不是,您可能应该为其IRC::SendBuf()自身添加一个字符串长度参数。

于 2010-11-28T07:31:20.083 回答