// SockClient.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" //нужно в линки добовлять ws2_32.lib или winsock32.lib /********** простейший консольный пример - КЛИЕНТ ******************/ #include //для использования стандарных операторов типо cout #include //для использования getch(); #include #include #include using namespace std;//прямой доступ к операторам типо std::cout<h_addr, // h_addr указывает на область памяти, содержащую адрес узла в том виде, в котором его используют системные вызовы и функции socket-интерфейса. lphost->h_length // h_lenght содержит длину адреса узла. ); serv_addr.sin_port=htons(3000);//номер порта int error; error = connect(//Для установления связи "клиент->сервер" d_socket,//дескриптор socket'а (struct sockaddr *)&serv_addr,//указатель на структуру данных, содержащую адрес, //приписанный socket'у программы-сервера к которой //делается запрос на соединение. Для сетей TCP/IP //такой структурой является sockaddr_in. sizeof(serv_addr)//размер (в байтах) структуры данных );//При успешном выполнении запроса системный вызов connect возвращает 0, в противном случае - "-1" (устанавливая код причины неуспеха в глобальной переменной errno). if(error<0){ std::cout<<"ОШИБКА! соединения с сервером\n"; error=WSAGetLastError(); std::cout<>message;//чтение от пользователя //Для посылки данных партнеру по сетевому взаимодействию используется системный вызов send send( d_socket,//дескриптор socket'а message,//область памяти, содержащую передаваемые данные. sizeof(message),//длина (в байтах) передаваемых данных 0//модифицирует исполнение системного вызова send. //При нулевом значении этого аргумента вызов send //полностью аналогичен системному вызову write. );//по завершении возвращает (!)количество переданных данных //прием //Для получения данных используется системный вызов recv char buff[3]; recv( d_socket,//дескриптор socket'а buff,//указывает на область памяти, предназначенную для размещения принимаемых данных. sizeof(buff),//задает длину (в байтах) этой области. 0//Аргумент flags модифицирует исполнение системного вызова recv. //При нулевом значении этого аргумента вызов recv //полностью аналогичен системному вызову read. ); //по завершении возвращает (!)количество принятых данных std::cout<<"Получен ответ от сервера: "<