Winsock总是找到连接

时间:2018-04-11 09:59:24

标签: c++ udp

我正在尝试在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);
    }

    }



 } 

1 个答案:

答案 0 :(得分:1)

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

您忽略了listen()的错误。

您没有正确测试accept()的返回值。当accept()失败时,会返回INVALID_SOCKET,其定义为(SOCKET)(~0)(也称为-1投放到SOCKET)。任何非零值都将在布尔表达式中计算为true,例如if语句。

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