gpt4 book ai didi

c++ - Winsock 总能找到连接

转载 作者:行者123 更新时间:2023-11-28 04:43:17 24 4
gpt4 key购买 nike

我正在尝试通过 C++ 中的 udp 套接字发送字符串。每当我运行此代码时,它总是打印无限连接。我在这里做错了什么?我不确定它在收听时看到的是什么连接,或者我的收听代码中是否有错误?任何帮助将不胜感激:)

void main()

{
long sucessful;
WSAData WinSockData;
WORD DLLVERSION;

DLLVERSION = MAKEWORD(2, 1);

sucessful = WSAStartup(DLLVERSION, &WinSockData);

SOCKADDR_IN ADDRESS;
int cacheSize = sizeof(ADDRESS);

SOCKET sock_LISTEN;

SOCKET sock_CONNECTION;

sock_CONNECTION = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

ADDRESS.sin_addr.s_addr = inet_addr("127.0.0.1");
ADDRESS.sin_family = AF_INET;
ADDRESS.sin_port = htons(444);

sock_LISTEN = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
bind(sock_LISTEN, (SOCKADDR*)&ADDRESS, sizeof(ADDRESS));
listen(sock_LISTEN, SOMAXCONN);

for (;;) {


if (sock_CONNECTION = accept(sock_LISTEN,NULL, NULL)) {
cout << "connection was found \n";
sucessful = send(sock_CONNECTION, "I SEE YOU JAVA!", 100, NULL);
}

}



}

最佳答案

UDP 是无连接的,您不能在 UDP 套接字上调用 listen()accept()。它们都将失败并从 WSAGetLastError() 报告 WSAEOPNOTSUPP

您正在忽略来自 listen() 的错误。

您没有正确测试 accept() 的返回值。当 accept() 失败时,它返回 INVALID_SOCKET,它被定义为 (SOCKET)(~0)(又名 -1 转换为 SOCKET)。任何非零值都将在 bool 表达式中计算为真,例如 if 语句。

在向 UDP 监听器发送数据包之前,无法检测它是否正在运行。你所能做的就是无条件地发送数据包并希望响应被发回。

关于c++ - Winsock 总能找到连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49772081/

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