21xrx.com
2025-06-20 17:51:01 Friday
文章检索 我的文章 写文章
C++ TCP 服务器
2023-07-13 15:50:51 深夜i     21     0
C++ TCP 服务器 网络编程 套接字编程

C++ 是一种通用的编程语言,常被用于开发系统级应用和高性能服务器,其中 TCP 服务器就是其中之一。在这篇文章中,我们将介绍如何使用 C++ 编写 TCP 服务器。

首先,我们需要了解 TCP 协议以及服务器和客户端之间的通信方式。TCP(Transmission Control Protocol)是一种面向连接的传输协议,它提供了可靠的数据传输和流控制机制。服务器和客户端之间的通信是基于套接字(socket)的。套接字是网络编程的核心概念,它是计算机之间进行通信的一种抽象表示。

在 C++ 中,我们可以使用 socket API 来创建和管理套接字。下面是一个简单的 TCP 服务器程序示例:

#include <iostream>
#include <cstring>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int main()
{
  // 创建套接字
  int server_fd = socket(AF_INET, SOCK_STREAM, 0);
  if (server_fd == -1) {
    std::cerr << "Error creating socket\n";
    return 1;
  }
  // 绑定监听地址和端口
  sockaddr_in addr {};
  addr.sin_family = AF_INET;
  addr.sin_addr.s_addr = htonl(INADDR_ANY);
  addr.sin_port = htons(8080);
  if (bind(server_fd, (sockaddr*)&addr, sizeof(addr)) == -1) {
    std::cerr << "Error binding socket\n";
    return 1;
  }
  // 监听连接请求
  if (listen(server_fd, 5) == -1) {
    std::cerr << "Error listening on socket\n";
    return 1;
  }
  // 接受连接请求并处理客户端请求
  sockaddr_in client_addr {};
  socklen_t client_len = sizeof(client_addr);
  int client_fd = accept(server_fd, (sockaddr*)&client_addr, &client_len);
  if (client_fd == -1) {
    std::cerr << "Error accepting client connection\n";
    return 1;
  }
  char buf[1024];
  int n = read(client_fd, buf, sizeof(buf));
  if (n == -1) {
    std::cerr << "Error reading from client connection\n";
    return 1;
  }
  std::cout << "Received " << n << " bytes from client: " << buf << "\n";
  // 关闭套接字
  close(client_fd);
  close(server_fd);
  return 0;
}

上面的程序中,我们首先创建了一个 TCP 套接字,然后指定服务器监听地址和端口,接着将该套接字设置为监听状态等待客户端连接。当客户端连接到服务器时,`accept` 函数将接受连接请求,并返回一个新的客户端套接字,通过该套接字可以进行客户端和服务器之间的通信。在示例程序中,我们读取并打印了从客户端发送过来的数据,然后关闭了客户端和服务器的套接字。

需要注意的是,实际的 TCP 服务器程序要比上面的示例程序更加复杂,需要处理多个连接请求,并能同时处理多个客户端请求等。因此,开发高性能的 TCP 服务器需要深入理解 TCP 协议和 socket 编程原理,以及使用 C++ 线程池技术等一系列高级技术。

  
  

评论区