2075 / C++ / Додатково / Сокети
Сокет – кінцева точка з'єднання
Серверний сокет – комутатор
Сокет прослуховує мережу і є прив'язаним до певного порту ОС
Проста взаємодія:
СЕРВЕР
#pragma comment(lib, "ws2_32.lib") #include <winsock2.h> #include <iostream> #pragma warning(disable: 4996) using namespace std; 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(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; newConnection = accept(sListen, (SOCKADDR*)&addr, &sizeofaddr); if (newConnection == 0) { cout << "Error #2\n"; } else { cout << "Client Connected!\n"; char msg[256] = "Hello. It`s my first network program!"; send(newConnection, msg, sizeof(msg), NULL); } system("pause"); return 0; }
КЛІЄНТ
#pragma comment(lib, "ws2_32.lib") #include <winsock2.h> #include <iostream> #pragma warning(disable: 4996) using namespace std; 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(1111); addr.sin_family = AF_INET; SOCKET Connection = socket(AF_INET, SOCK_STREAM, NULL); if (connect(Connection, (SOCKADDR*)&addr, sizeof(addr)) != 0) { cout << "Error: failed connect to server.\n"; return 1; } cout << "Connected!\n"; char msg[256]; recv(Connection, msg, sizeof(msg), NULL); cout << msg << endl; system("pause"); return 0; }