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

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

PHPz
PHPzoriginal
2024-04-26 13:03:02937parcourir

C++ fournit des fonctions d'établissement et de gestion pour les sockets côté serveur, notamment la création de sockets via socket(), la liaison d'adresses et de ports via bind() et l'écoute des connexions via Listen(). Une fois établi, vous pouvez utiliser accept() pour accepter la connexion, send()/recv() pour envoyer/recevoir des données, et enfin fermer le socket avec close().

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

Comment les fonctions C++ créent et gèrent les sockets côté serveur en programmation réseau

En programmation réseau, les sockets côté serveur sont la clé de la communication entre le processus et le client. C++ fournit un riche ensemble de fonctions pour développer des applications réseau qui peuvent être utilisées pour établir et gérer des sockets côté serveur.

Établir un socket côté serveur

Pour établir un socket côté serveur, les étapes suivantes doivent être appelées :

  1. Créez un socket à l'aide de la fonction socket(). socket() 函数创建一个套接字。
  2. 使用 bind() 函数将套接字与一个地址和端口号绑定。
  3. 使用 listen() 函数使套接字处于监听状态。
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>

int main() {
  // 创建套接字
  int server_fd = socket(AF_INET, SOCK_STREAM, 0);
  if (server_fd == -1) {
    std::cerr << "socket() failed" << std::endl;
    return -1;
  }

  // 绑定套接字
  struct sockaddr_in server_addr;
  server_addr.sin_family = AF_INET;
  server_addr.sin_port = htons(8080);
  server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  int bind_result = bind(server_fd, (struct sockaddr *) &server_addr, sizeof(server_addr));
  if (bind_result == -1) {
    std::cerr << "bind() failed" << std::endl;
    return -1;
  }

  // 监听套接字
  int listen_result = listen(server_fd, 5);
  if (listen_result == -1) {
    std::cerr << "listen() failed" << std::endl;
    return -1;
  }

  // ... // 处理客户端连接的代码
}

管理服务器端套接字

一旦套接字建立,可以将其用于与客户端进行通信。以下是如何管理服务器端套接字的几种主要方法:

  • 使用 accept() 函数接受来自客户端的连接。
  • 使用 send()recv() 函数发送和接收数据。
  • 使用 close()Utilisez la fonction bind() pour lier le socket à une adresse et un numéro de port.
Utilisez la fonction listen() pour mettre le socket en état d'écoute.

#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>  // for close()

int main() {
  // 创建套接字
  int server_fd = socket(AF_INET, SOCK_STREAM, 0);
  if (server_fd == -1) {
    std::cerr << "socket() failed" << std::endl;
    return -1;
  }

  // 绑定套接字
  struct sockaddr_in server_addr;
  server_addr.sin_family = AF_INET;
  server_addr.sin_port = htons(8080);
  server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  int bind_result = bind(server_fd, (struct sockaddr *) &server_addr, sizeof(server_addr));
  if (bind_result == -1) {
    std::cerr << "bind() failed" << std::endl;
    return -1;
  }

  // 监听套接字
  int listen_result = listen(server_fd, 5);
  if (listen_result == -1) {
    std::cerr << "listen() failed" << std::endl;
    return -1;
  }

  // 接受客户端连接
  int client_fd;
  while ((client_fd = accept(server_fd, (struct sockaddr *) NULL, NULL)) != -1) {
    // 为客户端创建子进程进行处理
    if (fork() == 0) {
      // ... // 处理客户端连接的代码
      close(client_fd);
      exit(0);
    }
  }

  // 关闭套接字
  close(server_fd);

  return 0;
}
Gérer les sockets côté serveur

Une fois le socket établi, il peut être utilisé pour communiquer avec le client. Voici les principales façons de gérer les sockets côté serveur : 🎜
    🎜🎜Utilisez la fonction accept() pour accepter les connexions des clients. 🎜🎜🎜🎜Utilisez les fonctions send() et recv() pour envoyer et recevoir des données. 🎜🎜🎜🎜Utilisez la fonction close() pour fermer le socket. 🎜🎜🎜🎜🎜Cas pratique : serveur TCP🎜🎜🎜Ce qui suit est un exemple simple de serveur TCP C++ qui montre comment établir et gérer des sockets côté serveur : 🎜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