Einführung in den Prozess zum Erstellen einer TCP-Verbindung im Linux-System

Einführung in den Prozess zum Erstellen einer TCP-Verbindung im Linux-System

Schritte zum Erstellen von TCP in Linux

Für die TCP-Programmierung sind zwei Codesätze für Client und Server erforderlich, und der Prozess der TCP-Erstellung ist nicht vollständig konsistent.

Server

Erstellen eines Sockets mit der Socket-Funktion

Verwenden Sie die Funktion setsockopt, um die Socket-Eigenschaften festzulegen

Verwenden Sie die Bindefunktion, um die IP-Adresse und die Portinformationen an den Socket zu binden, und verwenden Sie die Listenfunktion, um den angegebenen Port abzuhören

Verwenden Sie die Akzeptieren-Funktion, um die Verbindungsanfrage des Clients zu empfangen

Verwenden Sie die Sende-/Empfangs- und Lese-/Schreibfunktionen zum Senden und Empfangen von Daten

Mit der Funktion „Schließen“ schließen Sie die Netzwerkverbindung und überwachen

Kunde

Verwenden Sie die Socket-Funktion, um einen Socket zu erstellen, und verwenden Sie die Funktion setsockopt, um Socket-Eigenschaften festzulegen

Verwenden Sie die Bind-Funktion, um die IP-Adresse und die Portinformationen zu binden

Legen Sie die IP-Adresse und den Port für die Verbindung fest und fordern Sie mithilfe der Verbindungsfunktion eine Verbindung an.

Verwenden Sie die Sende-/Empfangs- und Lese-/Schreibfunktionen zum Senden und Empfangen von Daten

Mit der Schließen-Funktion schließen Sie die Netzwerkverbindung

TCP-Einrichtungsprozess

Linux erstellt TCP-Verbindung process_linux

Beispielcode

Server

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <zeit.h>
#maximaleGröße 128 definieren

char news[MAXSIZE];
int res; //Wird verwendet, um den Rückgabewert der Funktion zu empfangen void* pthread_chat(void * arg) //Erstelle einen Thread zum Empfangen von Daten {
    Geben Sie den confd-Wert in das Feld ein, das Sie im Kontextmenü des Arguments angeben.
    während(1)
    {
        res = recv(confd, Nachrichten, Größe von(Nachrichten), 0);
        wenn(res <= 0)
        {
        perror("empfangen");
        brechen;
        }
        printf("Die Neuigkeit ist: %s\n",news);
        memset(Neuigkeiten,0,MAXIMALE GRÖSSE);
        sende(confd,"OK",2,0);
    }

    printf("Ein Kunde vorbei\n");
    schließen(confd);
}

char *Time() // Aktuelle Uhrzeit abrufen {
    time_t-Zeitgeber;
    Struktur tm *tblock;
    Timer = Zeit(NULL);
    tblock = Ortszeit(&Timer);
    gibt asctime(tblock) zurück;
}

void save(char *s) //Logdatei speichern {
    int fd;
    fd = öffnen("Journal",O_RDWR|O_APPEND|O_CREAT);

    wenn(fd < 0)
        perror("öffnen");
    anders
    {
        char *buf = Zeit();
        strcat(buf,s);

        schreiben(fd,buf,MAXSIZE);
        lseek(fd,0,SUCHE_ENDE);

        wenn(res < 0)
            perror("schreiben");
    }
}

int main()
{
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    Struktur sockaddr_in saddr, caddr;
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(6666);
    saddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    res = binden(sockfd,(Struktur sockaddr*)&saddr,Größevon(saddr));
    wenn(res < 0)
        perror("binden");

    listen(sockfd, 5); //Port abhören, während(1)
    {
        int len ​​= sizeof(caddr);
        int confd = akzeptieren(sockfd,(Struktur sockaddr*)&caddr, &Länge);
        wenn(confd < 0)
        {
            perror("akzeptieren");
            weitermachen;
        }anders
        {
            speichern(inet_ntoa(caddr.sin_addr));
        }

        printf("Akzeptiere confdis:%d, ip=%s\n",confd,inet_ntoa(caddr.sin_addr));

        pthread_t-Tid;
        pthread_create(&tid, NULL, pthread_chat, &confd);
    }
}

Kunde

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>  
#maximaleGröße 128 definieren

char news[MAXSIZE];
int res; //Wird verwendet, um den Rückgabewert der Funktion zu erhalten int main()
{
    printf("------Willkommen im Chatroom-----\n");
    printf("Wenn Sie beenden möchten, geben Sie bitte --bye--\n ein");
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);

    Struktur sockaddr_in saddr;
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(6666);
    saddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    int confd = verbinden(sockfd,(Struktur sockaddr*)&saddr,sizeof(saddr));
    wenn(confd < 0)
        perror("verbinden");

    während(1)
    {
        printf("Bitte geben Sie die Neuigkeiten ein\n");
        fgets(Nachrichten,MAXSIZE,stdin);

        wenn(strncmp(Neuigkeiten,"Tschüss",3) == 0)
        {
            brechen;
        }

        sende(sockfd, news, strlen(news), 0);
        memset(Neuigkeiten,0,MAXIMALE GRÖSSE);
        recv(sockfd, Nachrichten, Größe von(Nachrichten), 0);
          printf("Die Neuigkeit des Servers ist: %s\n",news);
    }

    schließen(sockfd);
    Ausfahrt (0);
}

Bitte beachten Sie, dass Sie beim Kompilieren die Option -lpthread hinzufügen müssen, da der Server eine Multithread-Entwicklung verwendet.

Der Programmablauf hat folgende Auswirkungen:

Linux erstellt TCP-Verbindung process_network communication_02

Dies ist das Ende dieses Artikels über den Prozess der Erstellung einer TCP-Verbindung im Linux-System. Weitere relevante Inhalte zur Erstellung einer TCP-Verbindung in Linux finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • So testen Sie die maximale Anzahl von TCP-Verbindungen in Linux
  • Lösung für das Timeout-Problem der TCP-Verbindung unter Linux
  • 2 Befehle zum Überprüfen der TCP-Verbindung unter Linux

<<:  Rufen Sie die Schriftart entsprechend dem Schriftnamen auf, damit der Browser die gewünschte Schriftart anzeigt

>>:  HTML-Grammatik-Enzyklopädie_HTML-Sprachgrammatik-Enzyklopädie (unbedingt lesen)

Artikel empfehlen

Lösung für MySQL-Fehler beim Ändern des SQL-Modus

Inhaltsverzeichnis Ein Mord verursacht durch ERR ...

So verwenden Sie wangEditor in Vue und erhalten durch Echo von Daten den Fokus

Bei der Hintergrundverwaltung von Projekten werde...

Ein kurzes Verständnis der MySQL SELECT-Ausführungsreihenfolge

Die vollständige Syntax der SELECT-Anweisung laut...

Webdesign-Tutorial (7): Verbesserung der Webdesign-Effizienz

<br />Vorheriger Artikel: Webdesign-Tutorial...

Implementieren Sie ein einfaches Datenantwortsystem

Inhaltsverzeichnis 1. Dep 2. Verstehen Sie den Be...

Implementierung eines CSS-Textschatten-Effekts zur allmählichen Unschärfe

Textschatten Fügen Sie dem Text einen Schatten hi...

MySql-Wissenspunkte: Transaktion, Index, Sperrprinzip und Nutzungsanalyse

Dieser Artikel erläutert anhand von Beispielen di...

Installationsprozess von Zabbix-Agent auf Kylin V10

1. Laden Sie das Installationspaket herunter Down...

Nginx implementiert dynamische und statische Trennung Beispielerklärung

Um das Parsen der Website zu beschleunigen, könne...

MySQL Dezimalzahl unsigned Update negative Zahlen in 0 umgewandelt

Heute habe ich bei der Überprüfung des Parallelit...

4 praktische Tipps für die Webseitengestaltung

Verwandte Artikel: 9 praktische Tipps zum Erstelle...