0 Pluspunkte 0 Minuspunkte

Es gibt ja unzählige Beispiele mit irgendwelchen Socket Programmen. Aber wie erstelle ich einen ganz einfachen Socket mit WinSock von Grund auf.

Socket erstellen
Verbindung aufbauen
Nachricht senden
Antwort lesen
Verbindung schliessen
von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Es gibt zwei Hauptkomponenten, um einen TCP-Socket zu erstellen: den Server und den Client. Ein Server wartet normalerweise auf eingehende Verbindungen und verarbeitet Anfragen von Clients. Ein Client stellt eine Verbindung zum Server her, sendet Anfragen und empfängt Antworten.

Hier ist ein Server.

#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

int main() {

    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 2), &wsaData);

    SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, 0);

    struct sockaddr_in serverAddr;
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(12345);
    serverAddr.sin_addr.s_addr = INADDR_ANY;

    bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr));

    listen(serverSocket, 5);

    SOCKET clientSocket;
    struct sockaddr_in clientAddr;
    int clientAddrLen = sizeof(clientAddr);
    clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddr, &clientAddrLen);

    char buffer[1024];
    recv(clientSocket, buffer, sizeof(buffer), 0);
    send(clientSocket, "Hello from server!", sizeof("Hello from server!"), 0);

    closesocket(clientSocket);
    closesocket(serverSocket);

    WSACleanup();

    return 0;

}

Hier ist ein Client

#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

int main() {

    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 2), &wsaData);

    SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0);

    struct sockaddr_in serverAddr;
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(12345);
    serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    connect(clientSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr));

    send(clientSocket, "Hello from client!", sizeof("Hello from client!"), 0);
    char buffer[1024];
    recv(clientSocket, buffer, sizeof(buffer), 0);

    printf("Received: %s\n", buffer);

    closesocket(clientSocket);

    WSACleanup();

    return 0;

}
von