gpt4 book ai didi

c++ - 绑定(bind)方法给出错误 10038 (WSAENOTSOCK)

转载 作者:行者123 更新时间:2023-11-28 05:44:08 25 4
gpt4 key购买 nike

我在使用 bind() 和 sendto() 方法时遇到问题,它在 WSAGetLastError() 上给出 10038,MSDN 表示套接字上的操作无效。我不明白我的代码有什么问题。我已经在 TCP 上测试了我的代码并且它可以工作但是在 UDP 上它不工作。我看过其他帖子,人们遇到了同样的错误,但这主要是套接字关闭的问题。提前致谢。

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

最佳答案

这一行是问题所在:

  if (__ping_server_socket = socket(AF_INET, SOCK_DGRAM, 0) == SOCKET_ERROR)

它将 __ping_server_socket 设置为比较结果(truefalse,转换为整数 10),而不是 socket() 返回的值。您需要在赋值周围加上括号以覆盖默认的运算符优先级。

  if ((__ping_server_socket = socket(AF_INET, SOCK_DGRAM, 0)) == SOCKET_ERROR)

关于c++ - 绑定(bind)方法给出错误 10038 (WSAENOTSOCK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36557408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com