Подключение к серверу на разных пк 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);