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().
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 :
socket()
. socket()
函数创建一个套接字。bind()
函数将套接字与一个地址和端口号绑定。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. 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; }
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 : 🎜rrreeeCe 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!