C++ socket网络编程



C++ 提供了多种方式来进行网络编程,其中最常用的是使用套接字(sockets)。以下是一个简单的示例,展示如何使用 C++ 进行基本的 TCP 套接字编程

#include <iostream>  
#include <cstring>  
#include <sys/socket.h>  
#include <arpa/inet.h>  
#include <unistd.h>  
  
int main() {  
    // 创建 socket 文件描述符  
    int server_fd = socket(AF_INET, SOCK_STREAM, 0);  
    if (server_fd == -1) {  
        std::cerr << "Failed to create socket" << std::endl;  
        return 1;  
    }  
  
    // 绑定地址和端口号  
    struct sockaddr_in server_address;  
    server_address.sin_family = AF_INET;  
    server_address.sin_port = htons(8080);  
    server_address.sin_addr.s_addr = INADDR_ANY;  
    if (bind(server_fd, (struct sockaddr *)&server_address, sizeof(server_address)) == -1) {  
        std::cerr << "Bind failed" << std::endl;  
        return 1;  
    }  
  
    // 监听连接请求  
    if (listen(server_fd, 5) == -1) {  
        std::cerr << "Listen failed" << std::endl;  
        return 1;  
    }  
  
    std::cout << "Server listening on port 8080..." << std::endl;  
  
    // 接受客户端连接请求并发送消息  
    struct sockaddr_in client_address;  
    socklen_t client_address_length = sizeof(client_address);  
    int client_fd = accept(server_fd, (struct sockaddr *)&client_address, &client_address_length);  
    if (client_fd == -1) {  
        std::cerr << "Accept failed" << std::endl;  
        return 1;  
    }  
  
    std::cout << "Client connected from " << inet_ntoa(client_address.sin_addr) << std::endl;  
    char message[] = "Hello, client!";  
    send(client_fd, message, strlen(message), 0);  
    close(client_fd);  
    close(server_fd);  
  
    return 0;  
}

这个示例创建了一个 TCP 服务器,监听端口 8080。当客户端连接到服务器时,服务器会发送一条消息给客户端,然后关闭连接。注意,这只是一个简单的示例,实际的网络编程可能会涉及到更复杂的协议和错误处理。