Heim > Backend-Entwicklung > C++ > Wie erstellen und verwalten C++-Funktionen Client-Sockets in der Netzwerkprogrammierung?

Wie erstellen und verwalten C++-Funktionen Client-Sockets in der Netzwerkprogrammierung?

WBOY
Freigeben: 2024-04-27 21:18:02
Original
1219 Leute haben es durchsucht

Um Client-Sockets in C++ einzurichten und zu verwalten, müssen Sie die folgenden Schritte ausführen: Verwenden Sie die Funktion socket(), um einen Socket zu erstellen. Verwenden Sie die Funktion connect(), um den Socket mit dem Server zu verbinden. Verwenden Sie die Funktionen send() und recv(), um Daten mit dem Server auszutauschen.

C++ 函数在网络编程中如何建立和管理客户端端套接字?

C++-Funktionen zum Einrichten und Verwalten von Client-Sockets in der Netzwerkprogrammierung

Das Einrichten und Verwalten von Client-Sockets ist eine grundlegende Aufgabe in der Netzwerkprogrammierung, und C++ bietet mehrere Funktionen, um dieses Ziel zu erreichen.

Erstellen Sie einen Client-Socket.

Verwenden Sie die Funktion socket(), um einen Socket zu erstellen: socket() 函数创建套接字:

#include <sys/socket.h>

int socket(int domain, int type, int protocol);
Nach dem Login kopieren
  • domain: 指定协议族,通常使用 AF_INET(IPv4)或 AF_INET6(IPv6)。
  • type: 指定套接字类型,对于客户端通常使用 SOCK_STREAM(TCP)或 SOCK_DGRAM(UDP)。
  • protocol: 通常为 0,允许操作系统选择默认协议。

示例:

int sockfd = socket(AF_INET, SOCK_STREAM, 0);
Nach dem Login kopieren

连接到服务器

使用 connect() 函数将客户端套接字连接到服务器:

#include <sys/socket.h>

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
Nach dem Login kopieren
  • sockfd: 客户端套接字描述符。
  • addr: 服务器地址结构体(通常是 sockaddr_in)。
  • addrlen: 地址结构体的大小。

示例:

struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(80);
inet_pton(AF_INET, "192.168.1.100", &servaddr.sin_addr);

int rc = connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
Nach dem Login kopieren

发送和接收数据

使用 send()recv() 函数与服务器交换数据:

#include <sys/socket.h>

ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
Nach dem Login kopieren
  • sockfd: 客户端套接字描述符。
  • buf: 数据缓冲区。
  • len: 发送或接收的数据长度。
  • flags: 标志,通常为 0
    char buf[1024];
    int n = recv(sockfd, buf, sizeof(buf), 0);
    Nach dem Login kopieren
    • domain:
    Geben Sie die Protokollfamilie an, normalerweise verwenden Sie AF_INET (IPv4) oder AF_INET6 (IPv6).

  • type: Gibt den Socket-Typ an, für Clients wird normalerweise SOCK_STREAM (TCP) oder SOCK_DGRAM (UDP) verwendet.

  • Protokoll: Normalerweise 0, sodass das Betriebssystem das Standardprotokoll auswählen kann.

    Beispiel: 🎜🎜
    #include <iostream>
    #include <sys/socket.h>
    #include <netinet/in.h>
    
    int main() {
        // 创建套接字
        int sockfd = socket(AF_INET, SOCK_STREAM, 0);
        if (sockfd < 0) {
            std::cout << "Error creating socket" << std::endl;
            return -1;
        }
    
        // 连接到服务器
        struct sockaddr_in servaddr;
        servaddr.sin_family = AF_INET;
        servaddr.sin_port = htons(80);
        inet_pton(AF_INET, "192.168.1.100", &servaddr.sin_addr);
        int rc = connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
        if (rc < 0) {
            std::cout << "Error connecting to server" << std::endl;
            return -1;
        }
    
        // 发送数据
        const char *msg = "Hello, server!";
        int n = send(sockfd, msg, strlen(msg), 0);
        if (n < 0) {
            std::cout << "Error sending data" << std::endl;
            return -1;
        }
    
        // 接收数据
        char buf[1024];
        n = recv(sockfd, buf, sizeof(buf), 0);
        if (n < 0) {
            std::cout << "Error receiving data" << std::endl;
            return -1;
        }
    
        std::cout << "Received data: " << buf << std::endl;
    
        // 关闭套接字
        close(sockfd);
    
        return 0;
    }
    Nach dem Login kopieren
    🎜🎜Mit dem Server verbinden🎜🎜🎜Verwenden Sie die Funktion connect(), um den Client-Socket mit dem Server zu verbinden: 🎜rrreee
    • 🎜sockfd : 🎜 Client-Socket-Deskriptor. 🎜
    • 🎜addr:🎜 Serveradressstruktur (normalerweise sockaddr_in). 🎜
    • 🎜addrlen:🎜 Die Größe der Adressstruktur. 🎜🎜🎜🎜Beispiel: 🎜🎜rrreee🎜🎜Senden und Empfangen von Daten🎜🎜🎜Verwenden Sie die Funktionen send() und recv(), um Daten mit dem Server auszutauschen: 🎜 rrreee
      • 🎜sockfd:🎜 Client-Socket-Deskriptor. 🎜
      • 🎜buf:🎜 Datenpuffer. 🎜
      • 🎜len:🎜 Die Länge der gesendeten oder empfangenen Daten. 🎜
      • 🎜flags:🎜 Flags, normalerweise 0. 🎜🎜🎜🎜Beispiel:🎜🎜rrreee🎜🎜Praktischer Fall: Einrichten und Verwalten von Client-Sockets🎜🎜🎜Dies ist ein vollständiges C++-Programm, das zeigt, wie die oben genannten Funktionen zum Einrichten und Verwalten von Client-Sockets verwendet werden:🎜 rrreee

    Das obige ist der detaillierte Inhalt vonWie erstellen und verwalten C++-Funktionen Client-Sockets in der Netzwerkprogrammierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage