Inicjacja połączenia serwerowego Windows w VC++
Pobieramy biblioteki sha1 i base64 z poprzedniego wpisu http://fx-team.fulara.com/sha1-64base-websocket-handshake/
Prosta aplikacja otwierająca port serwera:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #pragma comment(lib, "Ws2_32.lib") int main() { WSADATA wsaData; int result = WSAStartup(MAKEWORD(2, 2), &wsaData); if (result != NO_ERROR) printf("Initialization error.\n"); //cz2 SOCKET mainSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (mainSocket == INVALID_SOCKET) { printf("Error creating socket: %ld\n", WSAGetLastError()); WSACleanup(); return 1; } //cz3 sockaddr_in service; memset(&service, 0, sizeof(service)); service.sin_family = AF_INET; //service.sin_addr.s_addr = inet_addr("127.0.0.1"); InetPton(AF_INET, (PCWSTR)"127.0.0.1", &service.sin_addr.s_addr); //adres nasłuchujący service.sin_port = htons(27015); //port if (bind(mainSocket, (SOCKADDR*)&service, sizeof(service)) == SOCKET_ERROR) { printf("bind() failed.\n"); closesocket(mainSocket); return 1; } if (listen(mainSocket, 1) == SOCKET_ERROR) printf("Error listening on socket.\n"); SOCKET acceptSocket = SOCKET_ERROR; printf("Waiting for a client to connect...\n"); while (acceptSocket == SOCKET_ERROR) { acceptSocket = accept(mainSocket, NULL, NULL); } printf("Client connected.\n"); mainSocket = acceptSocket; return 0; } |
Klient
Aby sprawdzić, czy się połączy klient najprościej wpisać w przeglądarkę
1 | http://localhost:27015 |
Nie połączy się przeglądarka, ale konsola odpowie (trzeba jeszcze wysłać nagłówki odpowiedzi HTTP, żeby zadziałał program).