lima-city: Webhosting, Domains und Cloud
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 (720 Punkte)  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Fragen und Antworten bewerten
  • Themen von Fragen bearbeiten
  • Fragen, Antworten und Kommentare bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft.

2.3k Fragen

2.8k Antworten

266 Kommentare

14 Nutzer