СЕРВЕР (але після закриття одного з клієнтів – інший отримує дивні повідомлення)
#pragma comment(lib, "ws2_32.lib") #include <winsock2.h> #include <iostream> #pragma warning(disable: 4996) 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) { std::cout << "Error" << std::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(1111); 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) { std::cout << "Error #2\n"; } else { std::cout << "Client Connected!\n"; char msg[256] = "Hello. It`s my first network program!"; 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
#include
#pragma warning(disable: 4996)
SOCKET Connection;
void ClientHandler() {
char msg[256];
while (true) {
recv(Connection, msg, sizeof(msg), NULL);
std::cout << msg << std::endl;
}
}
int main(int argc, char* argv[]) {
//WSAStartup
WSAData wsaData;
WORD DLLVersion = MAKEWORD(2, 1);
if (WSAStartup(DLLVersion, &wsaData) != 0) {
std::cout << "Error" << std::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(1111);
addr.sin_family = AF_INET;
Connection = socket(AF_INET, SOCK_STREAM, NULL);
if (connect(Connection, (SOCKADDR*)&addr, sizeof(addr)) != 0) {
std::cout << "Error: failed connect to server.\n";
return 1;
}
std::cout << "Connected!\n";
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ClientHandler, NULL, NULL, NULL);
char msg1[256];
while (true) {
std::cin.getline(msg1, sizeof(msg1));
send(Connection, msg1, sizeof(msg1), NULL);
Sleep(10);
}
system("pause");
return 0;
}