Winsock всегда находит связь

Я пытаюсь отправить строку через сокет 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);
    }

    }



 } 

Вы не проверяете результаты большинства звонков. И даже когда вы это делаете (в случае accept), вы делаете это неправильно.

user7860670 11.04.2018 12:00
0
1
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

UDP не требует подключения, вы не можете вызывать listen() или accept() через сокет UDP. Они оба потерпят неудачу и сообщат о WSAEOPNOTSUPP из WSAGetLastError().

Вы игнорируете ошибки от listen().

Вы неправильно тестируете возвращаемое значение accept(). Когда accept() выходит из строя, он возвращает INVALID_SOCKET, который определяется как (SOCKET)(~0) (он же -1, преобразованный в SOCKET). Любое ненулевое значение будет оцениваться как истинное в логическом выражении, таком как оператор if.

Невозможно определить, работает ли прослушиватель UDP, до того, как вы отправите ему пакеты. Все, что вы можете сделать, это безоговорочно отправлять пакеты и надеяться, что ответы будут отправлены обратно.

Другие вопросы по теме