- , . , , , , . - , .
() . : ( ), , , . .
Windows
- WSA
- /
- WSA
- /
WSA.
?
#include < winsock2.h > #include < ws2tcpip.h > #include < iostream > #pragma comment(lib, "Ws2_32.lib") int main() { return 0; } |
Windows Sockets API: C++
, . : ip- HTTP-, , HTTP- (web-, ..).
WSA
WSADATA wsaData; int result; result = WSAStartup(MAKEWORD(2, 2), &wsaData); if(result!= 0) { std::cout << " WSAStartup: " << result << std::endl; return 1; } |
Windows Windows sockets API (WSA)
WSAStartup WSA WSAData. 0, , .
SOCKET clientSocket = INVALID_SOCKET; clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(clientSocket == INVALID_SOCKET) { std::cout << " socket(): " << WSAGetLastError() << std::endl; WSACleanup(); return 1; } |
socket . , 0 (INVALID_SOCKET).
?
#define ip "127.0.0.1" #define port 80 sockaddr_in clientService; clientService.sin_family = AF_INET; clientService.sin_addr.s_addr = inet_addr(ip); clientService.sin_port = htons(port); int result; result = connect( clientSocket, reinterpret_cast< SOCKADDR* >(&clientService), sizeof(clientService) ); if(result!= 0) { std::cout << " connect(): " << WSAGetLastError() << std::endl; WSACleanup(); return 1; } |
, .
, ip- (). connect, 0 .
Ip- sockaddr.
|
|
?
int result; char data[] = "Test"; result = send(clientSocket, data, static_cast< int >(strlen(data)), 0); if(result < 0) { std::cout << " send(): " << WSAGetLastError() << std::endl; return 1; } |
send. , .
, , , .
?
#define bufsize 256 char buf[bufsize]; int r; do { r = recv(clientSocket, buf, bufsize, 0); if(r > 0) std::cout << " " << r << " " << std::endl; else if(r == 0) std::cout << " " << std::endl; else std::cout << " recv(): " << WSAGetLastError() << std::endl; } while(r > 0); |
recv .
, bufsize .
closesocket(clientSocket); // WSACleanup() WSACleanup(); |
, WSA MSDN: Winsock reference.
Windows Sockets API: C++
() , .
, , , , -. - ( , " "). - , .
WSA
int iResult; WSAData d; iResult = WSAStartup(MAKEWORD(2, 2), &d); if(iResult!= 0) { std::cout << "Error at WSAStartup: " << iResult; return 1; } |
Windows Sockets API.
#define DEFAULT_PORT "27015" struct addrinfo *result = NULL, *ptr = NULL, hints; ZeroMemory(&hints, sizeof (hints)); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; hints.ai_flags = AI_PASSIVE; iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result); if (iResult!= 0) { std::cout << " getaddrinfo: " << iResult; WSACleanup(); return 1; } |
getaddrinfo sockaddr.
|
|
- AF_INET , IP .
- SOCK_STREAM .
- IPPROTO_TCP TCP .
- 270015 , .
SOCKET listenSocket = INVALID_SOCKET; listenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol); if(listenSocket == INVALID_SOCKET) { std::cout << "Error at socket(): " << WSAGetLastError(); freeaddrinfo(result); WSACleanup(); return 1; } |
socket , , , .