Maison >développement back-end >C++ >Comment les fonctions C++ établissent-elles et gèrent-elles les sockets client dans la programmation réseau ?

Comment les fonctions C++ établissent-elles et gèrent-elles les sockets client dans la programmation réseau ?

WBOY
WBOYoriginal
2024-04-27 21:18:021230parcourir

Pour établir et gérer les sockets clients en C++, vous devez suivre les étapes suivantes : Utilisez la fonction socket() pour créer un socket. Utilisez la fonction connect() pour connecter le socket au serveur. Utilisez les fonctions send() et recv() pour échanger des données avec le serveur.

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

Fonctions C++ pour établir et gérer les sockets client dans la programmation réseau

L'établissement et la gestion des sockets client est une tâche de base dans la programmation réseau, et C++ fournit plusieurs fonctions pour atteindre cet objectif.

Établir un socket client

Utilisez la fonction socket() pour créer un socket : socket() 函数创建套接字:

#include <sys/socket.h>

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

示例:

int sockfd = socket(AF_INET, SOCK_STREAM, 0);

连接到服务器

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

#include <sys/socket.h>

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • 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));

发送和接收数据

使用 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);
  • sockfd: 客户端套接字描述符。
  • buf: 数据缓冲区。
  • len: 发送或接收的数据长度。
  • flags: 标志,通常为 0
    char buf[1024];
    int n = recv(sockfd, buf, sizeof(buf), 0);
    • domain:
    Spécifiez la famille de protocoles, utilisez généralement AF_INET (IPv4) ou AF_INET6 (IPv6).

  • type : Spécifie le type de socket, pour les clients, utilisez généralement SOCK_STREAM (TCP) ou SOCK_DGRAM (UDP).
  • protocole : Généralement 0, permettant au système d'exploitation de choisir le protocole par défaut.

    Exemple : 🎜🎜
    #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;
    }
    🎜🎜Connectez-vous au serveur🎜🎜🎜Utilisez la fonction connect() pour connecter le socket client au serveur : 🎜rrreee
    • 🎜sockfd : 🎜 Descripteur de socket client. 🎜
    • 🎜addr :🎜 Structure de l'adresse du serveur (généralement sockaddr_in). 🎜
    • 🎜addrlen :🎜 La taille de la structure d'adresse. 🎜🎜🎜🎜Exemple : 🎜🎜rrreee🎜🎜Envoi et réception de données🎜🎜🎜Utilisez les fonctions send() et recv() pour échanger des données avec le serveur : 🎜 rrreee
      • 🎜sockfd:🎜 Descripteur de socket client. 🎜
      • 🎜buf:🎜 Tampon de données. 🎜
      • 🎜len:🎜 La longueur des données envoyées ou reçues. 🎜
      • 🎜flags :🎜 Drapeaux, généralement 0. 🎜🎜🎜🎜Exemple :🎜🎜rrreee🎜🎜Cas pratique : établissement et gestion des sockets client🎜🎜🎜Il s'agit d'un programme C++ complet qui montre comment utiliser les fonctions ci-dessus pour établir et gérer les sockets client :🎜 rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn