Winsock IRC客户端连接但不发送数据

时间:2010-11-28 07:29:20

标签: visual-studio-2010 visual-c++ winsock2

我正在使用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

1 个答案:

答案 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变量的大小(它是指针,而不是缓冲区)。如果sendbuf中的字符串以空值终止,则可以使用strlen()代替。如果不是,您可能应该将字符串长度参数添加到IRC::SendBuf()本身。