C++初学者必看:TCP/IP网络编程入门
创作时间:
作者:
@小白创作中心
C++初学者必看:TCP/IP网络编程入门
引用
CSDN
等
8
来源
1.
https://blog.csdn.net/erroror/article/details/143261581
2.
https://blog.csdn.net/qq_38880380/article/details/139116732
3.
https://learn.microsoft.com/zh-cn/troubleshoot/windows-client/networking/tcpip-addressing-and-subnetting
4.
https://www.tutorialspoint.com/cplusplus/cpp_socket_programming.htm
5.
https://www.cnblogs.com/codestack/category/1494258.html
6.
https://www.ecice06.com/EN/10.19678/j.issn.1000-3428.0063200
7.
https://www.geeksforgeeks.org/socket-programming-cc/
8.
https://www.cisco.com/c/zh_cn/support/docs/wireless/5500-series-wireless-controllers/113344-cuwn-ppm.html
TCP/IP网络编程是每个C++程序员都需要掌握的重要技能。本文将从TCP/IP模型的基础知识开始,逐步介绍如何使用C++进行socket编程,帮助初学者快速入门网络编程。
01
TCP/IP模型基础
在学习网络编程之前,我们首先需要了解TCP/IP模型的基本结构。TCP/IP模型将网络通信分为四个层次:
- 应用层:负责处理特定的应用程序细节,如HTTP、FTP等协议。
- 传输层:提供端到端的数据传输服务,主要协议有TCP和UDP。
- 网络层:负责数据包的路由选择,主要协议是IP。
- 链路层:负责在同一网络中传输数据帧。
在网络通信中,每个设备都有一个唯一的IP地址,用于标识其在网络中的位置。此外,每个网络应用程序都会使用一个端口号,用于区分不同的服务。例如,HTTP服务通常使用80端口,而HTTPS使用443端口。
02
Socket编程基础
Socket(套接字)是网络通信中的一个核心概念。它类似于电话插孔,是应用程序进行网络通信的端点。在C++中,我们可以使用socket API来创建和管理socket。
创建Socket
使用socket()函数可以创建一个新的socket:
#include <sys/socket.h>
#include <netinet/in.h>
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
AF_INET表示使用IPv4地址族SOCK_STREAM表示使用TCP协议- 最后一个参数0表示使用默认协议
绑定地址
创建socket后,需要将其与本地IP地址和端口绑定:
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(12345); // 使用12345端口
addr.sin_addr.s_addr = INADDR_ANY; // 监听所有网络接口
bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));
监听连接
对于服务器端socket,需要调用listen()函数来开始监听连接请求:
listen(sockfd, 5); // 5是等待队列的最大长度
接受连接
当有客户端连接请求时,使用accept()函数来接受连接:
int clientfd = accept(sockfd, NULL, NULL);
数据传输
使用send()和recv()函数可以在socket之间发送和接收数据:
const char* message = "Hello, World!";
send(clientfd, message, strlen(message), 0);
char buffer[1024];
recv(clientfd, buffer, sizeof(buffer), 0);
03
实践示例:服务器与客户端通信
下面是一个简单的服务器和客户端通信示例:
服务器端代码
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
addr.sin_addr.s_addr = INADDR_ANY;
bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));
listen(sockfd, 5);
std::cout << "Server is listening on port 12345..." << std::endl;
int clientfd = accept(sockfd, NULL, NULL);
char buffer[1024];
recv(clientfd, buffer, sizeof(buffer), 0);
std::cout << "Received message: " << buffer << std::endl;
const char* response = "Hello from server!";
send(clientfd, response, strlen(response), 0);
close(clientfd);
close(sockfd);
return 0;
}
客户端代码
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(sockfd, (struct sockaddr*)&addr, sizeof(addr));
const char* message = "Hello from client!";
send(sockfd, message, strlen(message), 0);
char buffer[1024];
recv(sockfd, buffer, sizeof(buffer), 0);
std::cout << "Received message: " << buffer << std::endl;
close(sockfd);
return 0;
}
04
学习建议与资源推荐
实践是关键:理论知识固然重要,但网络编程更需要动手实践。建议搭建一个本地测试环境,尝试编写更多复杂的网络应用程序。
推荐书籍:
- 《TCP/IP详解》:深入讲解TCP/IP协议的权威著作
- 《UNIX网络编程》:经典的网络编程教材
在线资源:
- Tutorialspoint C++ Socket Programming:详细的socket编程教程
- Beej's Guide to Network Programming:非常适合初学者的网络编程指南
通过不断学习和实践,你将逐步掌握TCP/IP网络编程的精髓,为开发更复杂的网络应用程序打下坚实基础。
热门推荐
桂龙药膏的说明书使用指南
Redis的数据结构及应用场景
不锈钢内胆和玻璃内胆哪个好?优缺点详细分析
探索智能艺术:AI绘画技术的创新与应用
冰箱聚氨酯发泡技术,2025年显现三大趋势
德国饮食文化全方位解读
机器人技术在物流行业中的应用与发展研究与展望
2024年动力煤市场回顾与2025年展望
在家也能享受地道板面风味!详细教程带你成为家庭“板面大厨”
探索公共物品的价值与社会影响力
迎春花的开花与生长过程(探究迎春花的生命周期及生长规律)
提升燃油效率的方法有哪些?
《明朝那些事儿》的历史可信度分析
未来已来!成都低空经济如何蓄势“高飞”?
诈骗金额及判刑标准:法律实务分析与解读
仓库管理员工作流程
蛋黄油的功效和作用是什么
《体重管理专家共识(科普版)》发布:引领健康新风尚,科学指导全民体重管理
人工智能模型训练技术:正则化方法详解
解决样本不平衡问题:一种基于AI的数据增强方法
几个挑选棒球帽永远不会出错的小技巧!
穴位太多记不住?锁定5大关键穴位,守护健康不费劲,小病小痛一扫清!
农民工 IT:新技能助力城市数字化转型
开菲尔(kefir)魔法:探索开菲尔的健康益处与家酿秘籍
鸿蒙系统面临多重挑战:从生态建设到用户接受度的全方位解析
ChatGPT中文写作助手使用指南 | AI写作技巧全攻略
企业如何专业地拒绝员工入职?这份指南请收好
双眼皮手术后如何快速恢复
揭秘中国现代企业不平凡的40年,这部音乐剧火出了圈
宁波大学研究发现:每天一杯豆浆,癌症风险降低46%