我對WSAGetLastError()提供了10038的bind()和sendto()方法存在問題,MSDN在套接字上表示爲無效操作。我不明白我的代碼有什麼問題。我已經在TCP上測試了我的代碼,它正在工作,但在UDP上無法正常工作。我已經看到其他人發生過相同錯誤的帖子,但是它主要是套接字關閉的問題。 在此先感謝。給出錯誤10038(WSAENOTSOCK)的綁定方法
int socket_func :: udpRelayCheck()
{
WSADATA __wsaData;
WORD __version = WSAStartup(MAKEWORD(2, 2), &__wsaData);
if (__version != 0)
{
WSACleanup();
return 1;
}
SOCKET __ping_server_socket;
sockaddr_in __ping_server_service;
if (__ping_server_socket = socket(AF_INET, SOCK_DGRAM, 0) == SOCKET_ERROR)
{
WSACleanup();
return 2;
}
memset((void*)&__ping_server_service, 0, sizeof(__ping_server_service));
__ping_server_service.sin_family = AF_INET;
__ping_server_service.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
__ping_server_service.sin_port = htons(55555);
int __ping_server_service_length = sizeof(__ping_server_service);
char *__relayMessage = "connect";
char __recvBuff[200] = "";
char *__check_buffer = "star";
if (bind(__ping_server_socket, (struct sockaddr *)&__ping_server_service, sizeof(__ping_server_service)) == INVALID_SOCKET)
{
cout << WSAGetLastError() << endl;
return -1;
}
while (1)
{
if (sendto(__ping_server_socket, __relayMessage,strlen(__relayMessage), 0, (struct sockaddr *)&__ping_server_service, __ping_server_service_length) == SOCKET_ERROR)
{
cout << WSAGetLastError() << endl;
return -1;
}
if (recvfrom(__ping_server_socket, __recvBuff, strlen(__recvBuff), 0, (SOCKADDR*)& __ping_server_service, &__ping_server_service_length) != SOCKET_ERROR)
{
if (strcmp(__check_buffer, __recvBuff) == 0)
{
__global_udp_relay_socket = __ping_server_socket;
__global_udp_relay_sockaddr = __ping_server_service;
WSACleanup();
return 0;
}
}
}
}
不要將以'__'開頭的變量命名,這是保留給實現的。 – Barmar
這是什麼意思? –
保留以兩個下劃線開頭的變量和函數名稱,您不允許在自己的變量和函數中使用這些名稱,以避免衝突的可能性。 – Barmar