C++网络编程:TCP服务器与客户端实现
一、学习目标与重点
本章将深入探讨C++网络编程的核心知识,帮助你掌握TCP服务器与客户端的实现。通过学习,你将能够:
- 理解网络编程的基本概念,掌握TCP/IP协议的核心要点
- 学会使用套接字编程,实现简单的TCP服务器与客户端
- 理解网络编程中的错误处理,提高程序的健壮性
- 学会使用Boost.Asio库,简化网络编程的复杂流程
- 培养网络编程思维,设计高效且稳定的网络应用
二、网络编程基础
2.1 TCP/IP协议简介
TCP/IP(传输控制协议/互联网协议)是互联网的核心协议,它提供了可靠的、面向连接的通信服务。TCP协议确保数据的可靠传输,通过三次握手建立连接,四次挥手关闭连接。
2.2 套接字编程基础
套接字(Socket)是网络编程的基础,它提供了进程间通信的接口。在C++中,可以使用<sys/socket.h>头文件提供的套接字API进行网络编程。
三、TCP服务器的实现
3.1 基本服务器结构
#include <iostream>
#include <string>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>
const int PORT = 8080;
const int BUFFER_SIZE = 1024;
int main() {
std::cout << "=== TCP服务器示例 ===" << std::endl;
// 1. 创建套接字
int server_fd = socket(AF_INET, SOCK_STREAM, );
(server_fd < ) {
std::cerr << << std::endl;
;
}
opt = ;
((server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, (opt)) < ) {
std::cerr << << std::endl;
(server_fd);
;
}
sockaddr_in address;
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = (PORT);
((server_fd, ( sockaddr*)&address, (address)) < ) {
std::cerr << << std::endl;
(server_fd);
;
}
((server_fd, ) < ) {
std::cerr << << std::endl;
(server_fd);
;
}
std::cout << << PORT << << std::endl;
addrlen = (address);
new_socket;
() {
std::cout << << std::endl;
new_socket = (server_fd, ( sockaddr*)&address, (*)&addrlen);
(new_socket < ) {
std::cerr << << std::endl;
;
}
client_ip[INET_ADDRSTRLEN];
(AF_INET, &address.sin_addr, client_ip, INET_ADDRSTRLEN);
std::cout << << client_ip << << std::endl;
buffer[BUFFER_SIZE] = {};
valread = (new_socket, buffer, BUFFER_SIZE);
(valread < ) {
std::cerr << << std::endl;
(new_socket);
;
}
std::cout << << buffer << std::endl;
std::string response = + std::(buffer);
(new_socket, response.(), response.(), );
std::cout << << std::endl;
(new_socket);
std::cout << << std::endl;
}
(server_fd);
;
}


