我正在使用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
答案 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()
本身。