旅游网站如何做网站如何配置域名
2026/4/15 17:45:48 网站建设 项目流程
旅游网站如何做,网站如何配置域名,福建手机版建站系统开发,珠海市建设局网站项目背景详细介绍 在所有网络通信技术中#xff0c;TCP 通讯是最基础、最核心、也是最重要的一种通信方式。 无论是#xff1a; Web 服务#xff08;HTTP / HTTPS#xff09; 数据库连接#xff08;MySQL / Redis#xff09; 微服务通信#xff08;RPC / gRPC 底层TCP 通讯是最基础、最核心、也是最重要的一种通信方式。无论是Web 服务HTTP / HTTPS数据库连接MySQL / Redis微服务通信RPC / gRPC 底层即时通信系统游戏服务器分布式系统其底层几乎全部依赖 TCP 协议。TCP 的核心特性包括面向连接可靠传输有序到达流量控制拥塞控制这使得 TCP 成为绝大多数工程级网络系统的首选协议。对于 C 开发者而言不会 TCP Socket 编程就无法真正进入系统级 / 后台开发领域然而TCP 编程对初学者并不友好API 偏底层概念多端口、IP、连接、阻塞等调用流程严格出错难以调试因此本项目的目标是用一个完整、清晰、可运行的 C TCP 客户端 / 服务器示例系统讲透 TCP 通讯的工程实现方式该示例可直接用于Linux 网络编程教学博客系统文章面试 Socket 编程后续高并发服务器epoll / reactor学习基础项目需求详细介绍1. 功能需求实现 TCP 服务器实现 TCP 客户端支持双向通信支持多次消息发送正确处理连接与断开2. 技术要求使用 POSIX Socket API基于 IPv4使用阻塞 IO便于教学支持 Linux / Unix 系统3. 教学与工程要求严格遵循 TCP 建立流程代码结构清晰、可扩展每个系统调用用途明确可作为后续 epoll / 多线程改造基础相关技术详细介绍1. TCP 通讯模型经典 TCP 通讯采用客户端 / 服务器模型Server监听端口等待连接Client主动发起连接基本流程如下服务器端socketbindlistenacceptrecv / send客户端socketconnectsend / recv2. Socket 是什么Socket 是操作系统提供的一种进程间网络通信抽象接口它屏蔽了底层网络细节使程序可以像操作文件一样进行网络通信。3. 阻塞 IO 的特点调用recv()时如果没有数据会阻塞实现简单不适合高并发非常适合教学与理解 TCP 流程实现思路详细介绍本项目采用最基础、最清晰的阻塞式 TCP 通讯模型定义 TCPServer 与 TCPClient 类服务器端创建监听 Socket接收客户端连接循环接收并回复消息客户端连接服务器循环发送并接收数据使用字符串作为通信内容所有错误进行简单处理该实现逻辑直观调用顺序清晰易于调试是后续所有网络模型的“母版”完整实现代码/**************************************************** * File: TCPServer.h ****************************************************/ #pragma once #include string class TCPServer { public: TCPServer(int port); ~TCPServer(); void start(); private: int m_port; int m_listenFd; }; /**************************************************** * File: TCPServer.cpp ****************************************************/ #include TCPServer.h #include arpa/inet.h #include unistd.h #include cstring #include iostream TCPServer::TCPServer(int port) : m_port(port), m_listenFd(-1) { } TCPServer::~TCPServer() { if (m_listenFd ! -1) close(m_listenFd); } void TCPServer::start() { // 创建 socket m_listenFd socket(AF_INET, SOCK_STREAM, 0); sockaddr_in addr{}; addr.sin_family AF_INET; addr.sin_port htons(m_port); addr.sin_addr.s_addr INADDR_ANY; // 绑定端口 bind(m_listenFd, (sockaddr*)addr, sizeof(addr)); // 监听 listen(m_listenFd, 5); std::cout Server listening on port m_port std::endl; // 接受客户端连接 int clientFd accept(m_listenFd, nullptr, nullptr); std::cout Client connected std::endl; char buffer[1024]; while (true) { memset(buffer, 0, sizeof(buffer)); int len recv(clientFd, buffer, sizeof(buffer), 0); if (len 0) break; std::cout Client: buffer std::endl; std::string reply Server received: ; reply buffer; send(clientFd, reply.c_str(), reply.size(), 0); } close(clientFd); } /**************************************************** * File: TCPClient.h ****************************************************/ #pragma once #include string class TCPClient { public: TCPClient(const std::string ip, int port); ~TCPClient(); void start(); private: std::string m_ip; int m_port; int m_sockFd; }; /**************************************************** * File: TCPClient.cpp ****************************************************/ #include TCPClient.h #include arpa/inet.h #include unistd.h #include cstring #include iostream TCPClient::TCPClient(const std::string ip, int port) : m_ip(ip), m_port(port), m_sockFd(-1) { } TCPClient::~TCPClient() { if (m_sockFd ! -1) close(m_sockFd); } void TCPClient::start() { // 创建 socket m_sockFd socket(AF_INET, SOCK_STREAM, 0); sockaddr_in addr{}; addr.sin_family AF_INET; addr.sin_port htons(m_port); inet_pton(AF_INET, m_ip.c_str(), addr.sin_addr); // 连接服务器 connect(m_sockFd, (sockaddr*)addr, sizeof(addr)); std::cout Connected to server std::endl; char buffer[1024]; while (true) { std::string msg; std::cout Input: ; std::getline(std::cin, msg); if (msg exit) break; send(m_sockFd, msg.c_str(), msg.size(), 0); memset(buffer, 0, sizeof(buffer)); recv(m_sockFd, buffer, sizeof(buffer), 0); std::cout buffer std::endl; } } /**************************************************** * File: server_main.cpp ****************************************************/ #include TCPServer.h int main() { TCPServer server(8888); server.start(); return 0; } /**************************************************** * File: client_main.cpp ****************************************************/ #include TCPClient.h int main() { TCPClient client(127.0.0.1, 8888); client.start(); return 0; }代码详细解读仅解读方法作用TCPServer封装 TCP 服务器逻辑负责监听端口并处理客户端连接。startServer完成 socket 创建、绑定、监听、接收连接以及数据收发。TCPClient封装 TCP 客户端逻辑负责连接服务器并进行通信。startClient建立 TCP 连接并进行双向消息通信。socket / bind / listen / acceptTCP 服务器端建立连接的标准调用流程。connect客户端向服务器发起连接请求。项目详细总结通过本项目你可以系统掌握TCP 协议在工程中的真实使用方式Linux Socket 编程完整流程客户端 / 服务器模型后续高并发网络编程的基础能力这是所有 C 后台、系统、网络方向的必修项目。项目常见问题及解答Q1为什么 recv 返回 0A表示对端正常关闭连接。Q2可以支持多个客户端吗A可以需引入多线程或 epoll。Q3为什么要使用 htonsA保证网络字节序一致性。扩展方向与性能优化多线程 TCP 服务器epoll / Reactor 模型TCP 粘包 / 拆包处理心跳机制SSL / TLS 加密通信

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询