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网络编程的精髓,为开发更复杂的网络应用程序打下坚实基础。
热门推荐
把握双11物流高峰,东风风光商务车主月入3万元
仓岛千百合:《加速世界》中的百变女王
百合在日本文化中的神秘象征
全国首创!北京23家标杆孵化器助力930家科技企业成长
全球孵化器:从办公空间到科技创新加速器
西双版纳热带花卉园:热带雨林里的网红打卡圣地
西双版纳热带花卉园门票优惠攻略:40元起畅游热带植物乐园
中国制造200强榜单发布:东部四省优势明显,重化工行业居首
大理洱海四大景点:三塔、古城、古镇、蝴蝶泉全攻略
每天一根香蕉,能控制血压?还能降低患心脏病风险?
苹果功效有哪些?苹果好处降血糖、胆固醇!这样吃糖尿病风险降28%
“一天一苹果”要更新了!新研究:两个护心、三个减重
体育明星代言签约全流程:从选择到评估的关键要点
2024年最新:5款专为胖人设计的男士发型
从生活习惯到药物治疗:女性免疫力提升全攻略
老北京焖面:从宋朝流传至今的千年美味
春节邻里的暖心问候:用一句祝福点亮社区的温暖
2024年最火婚礼歌曲大盘点!
《月亮代表我的心》:婚礼歌曲的永恒之选
我国医疗器械的发展历史
玄武门之变:尉迟敬德的英勇与忠诚
原发性血小板增多症的真相揭秘
高海拔旅行竟影响血小板计数?
龙门高铁站出发:洛阳必游三大景点详细攻略
明朝竟然就有汉语拼音?揭秘拼音历史
爬山提升心肺功能,你get了吗?
李先生的爬山秘诀:身心健康双丰收
家庭养殖干枝梅花的实用指南:让你的家居变美丽!
商标优先注册权,教你防抢注!
2024年开封花生产量激增至价格暴跌,政府出手稳市场