21xrx.com
2024-06-02 23:51:39 Sunday
登录
文章检索 我的文章 写文章
C++ TCP 服务器
2023-07-13 15:50:51 深夜i     --     --
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++ 线程池技术等一系列高级技术。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复