Подключение к серверу на разных пк c++

Не могу найти информацию, как переделать код, для подключения с разных пк Сервер:

#pragma comment(lib, "ws2_32.lib")
#include <iostream>
#include <winsock2.h>
#pragma warning(disable: 4996)
using namespace std;

SOCKET Connections[100];
int Counter = 0;

void ClientHandler(int index) {
    char msg[256];
    while (true) {
        recv(Connections[index], msg, sizeof(msg), NULL);
        for (int i = 0; i < Counter; i++) {
            if (i == index) {
                continue;
            }

            send(Connections[i], msg, sizeof(msg), NULL);
        }
    }
}

int main(int argc, char* argv[]) {

    //WSAStartup
    WSAData wsaData;
    WORD DLLVersion = MAKEWORD(2, 1);
    if (WSAStartup(DLLVersion, &wsaData) != 0) {
        cout << "Error" << endl;
        exit(1);
    }
    SOCKADDR_IN addr;
    int sizeofaddr = sizeof(addr);
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    addr.sin_port = htons(2347);
    addr.sin_family = AF_INET;

    SOCKET sListen = socket(AF_INET, SOCK_STREAM, NULL);
    bind(sListen, (SOCKADDR*)&addr, sizeof(addr));
    listen(sListen, SOMAXCONN);

    SOCKET newConnection;
    for (int i = 0; i < 100; i++) {
        newConnection = accept(sListen, (SOCKADDR*)&addr, &sizeofaddr);

        if (newConnection == 0) {
            cout << "Error" << endl;
        }
        else {
            cout << "Client Connected!" << endl;
            char msg[256] = "Hello, write your first message: ";
            send(newConnection, msg, sizeof(msg), NULL);

            Connections[i] = newConnection;
            Counter++;
            CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ClientHandler, (LPVOID)(i), NULL, NULL);
        }
    }


    system("pause");
    return 0;
}

И сам клиент:

#pragma comment(lib, "ws2_32.lib")
#include <iostream>
#include <winsock2.h>
#pragma warning(disable: 4996)
using namespace std;


SOCKET Connection;

void ClientHandler() {
    char msg[256];
    while (true) {
        recv(Connection, msg, sizeof(msg), NULL);
        cout << msg << endl;
    }
}


int main(int argc, char* argv[]) {

    //WSAStartup
    WSAData wsaData;
    WORD DLLVersion = MAKEWORD(2, 1);
    if (WSAStartup(DLLVersion, &wsaData) != 0) {
        cout << "Error" << endl;
        exit(1);
    }

    SOCKADDR_IN addr;
    int sizeofaddr = sizeof(addr);
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    addr.sin_port = htons(2347);
    addr.sin_family = AF_INET;

    Connection = socket(AF_INET, SOCK_STREAM, NULL);
    if (connect(Connection, (SOCKADDR*)&addr, sizeof(addr)) != 0) {
        cout << "Error: Failed connection" << endl;
        system("pause");
        return 1;
    }
    cout << "Connected!" << endl;

    CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ClientHandler, NULL, NULL, NULL);

    char msg1[256];
    while (true) {
        cin.getline(msg1, sizeof(msg1));
        send(Connection, msg1, sizeof(msg1), NULL);
        Sleep(10);
    }
    system("pause");
    return 0;
}

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

Автор решения: KoVadim

У Вас клиент явно указывает подключатся к 127.0.0.1 - локальной машине. Меняйте эту строку

addr.sin_addr.s_addr = inet_addr("127.0.0.1");

например, на такое

if (argc != 2) {
  cout << "запускайте с адресом подключения!\n"<<argv[0] << " 192.168.0.1\n";
  return 0;
}
addr.sin_addr.s_addr = inet_addr(argv[1]);

А в сервере нужно разрешить слушать для всего.

вместо

addr.sin_addr.s_addr = inet_addr("127.0.0.1");

написать

addr.sin_addr.s_addr = htonl(INADDR_ANY);
→ Ссылка