Цикличное подключение к серверу из "неоткуда"

В общем, когда я привязываю к сокету локальный адрес компа - всё нормально, но когда же я выставляю свой "белый" IP - происходит что-то страшное: введите сюда описание изображения

#include <winsock2.h>
#include <iostream>
#include<string>

#pragma warning(disable:4996)

SOCKET sSocket;
SOCKET Connections[10];
int countConn = 0;


bool client_send_sharp(const char* msg) {

    for (int i = 0; i < strlen(msg); i++) {
        if (msg[i] == '#') return true;
    }
    return false;

}


void ClientHandler(int indx) {
    int sz_msg;

    while (true)
    {
        recv(Connections[indx], (char*)&sz_msg, sizeof(sz_msg), NULL);
        char* msg = new char[sz_msg+1];
        msg[sz_msg] = '\0';

        recv(Connections[indx], msg, sz_msg,NULL);
        for (int i = 0; i < countConn; i++)
        {
            if (indx == i)
                continue;

            //Провер-очка
            if (client_send_sharp(msg)) {
                std::cout << ">[" << indx << "]" << "Disconnected\n";
                shutdown(Connections[i], SD_BOTH);
                //Connections[indx] = NULL;
            }
            else {
                send(Connections[i], (char*)&sz_msg, sizeof(sz_msg), NULL);
                send(Connections[i], msg, sz_msg, NULL);
            }

        }

        delete[] msg;
    }
}




int main()
{
    WSADATA wsadata;
    WORD version = MAKEWORD(2, 1);

    if (WSAStartup(version, &wsadata) != 0) {
        std::cout << "Error\n";
        return 0;
    }

    // настройка сокета
    SOCKADDR_IN addr;
    addr.sin_addr.s_addr = inet_addr("95.215.125.112"); // ip
    addr.sin_port = htons(80); // port
    addr.sin_family = AF_INET; // семейство протоколов

     sSocket = socket(AF_INET, SOCK_STREAM, NULL); // сокет
    bind(sSocket, (SOCKADDR*)&addr, sizeof(addr)); // привязываем адрес сокету
    listen(sSocket, SOMAXCONN); // прослушиваем порт сокета с максимальным числом подключений

    int sz = sizeof(addr);
    SOCKET ClientConnection;
    for (int i = 0; i < 10; i++)
    {
        ClientConnection = accept(sSocket, (SOCKADDR*)&addr, &sz);// принимаем нового пользователя(в addr будет храниться ip клиента)
        if (ClientConnection == 0) {
            std::cout << "Error 2\n";
            return 0;
        }
        else {
            std::cout << "> ["<< i << "] " << "Client Connected\n";
            std::string msg = "You are welcome!\n";
            int sz_msg = msg.size();
            send(ClientConnection, (char*)&sz_msg, sizeof(int), NULL);
            send(ClientConnection, msg.c_str(), sz_msg, NULL); // отправляем сообщение

            Connections[i] = ClientConnection;
            countConn++;
            CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ClientHandler, (LPVOID)i, NULL, NULL);

        }

    }
    system("pause");
    return 0;
}

Надеюсь на помощь.


Ответы (0 шт):