C++socket网络编程(跨平台)实战HTTP服务器(一)

简介:

        网络编程

Socket是跨平台的在Window和Linux基本通用,无论是,java php都是需要网络的,网络编程是每个程序员都需要掌握的,他并不复杂。复杂的地方是对整个协议的理解,还有网络通信的理解。

这个博客是对整个网络编程中最,学习的目的:

{能够熟悉windows和linux下的开发流程,能够开发出支持跨平台的多线程的网络程序。理解socket编程原理,理解udp和tcp的协议,并能通过抓包工具分析协议,通过本课程的学习能够开发出支持高并发的网络服务端,通过开发支持php的http服务器和syslog服务器能够将网络编程投入实战应用。掌握c++11的线程库和正则表达式库。}.


使用语音是:C/C++,因为他高性能,对高并发的处理很好.

最终可以带大家实战一个支持PHP脚本的http服务器。

需要注意的是Socket库不等同于TCP/UDP编程,因为他还可以开发其他

的一些协议。

交流群:140066160


进入正题:(先讲理论,在实战)


               1TCPIP协议分层讲解


学习网络编程,他说基于什么协议之上的。不是会用几个函数就可以了,那么TCP/IP是基于什么协议呢?

我们对网络编程不能停留在仅仅会用Socket把两个程序调通了,互相发送协议。你要明白整个协议的过程,为了实践当中解决

问题,碰到网络问题你知道是什么原因。


wKiom1loKDST3w_GAAE-Dm7Nn80587.png-wh_50


看TCP/TP四层协议,我看到我们程序人员其实只要用到

这四层,OSI模型中。


1.网络介质层

物理层和数据链路层对应的是“网络介质层”,

每一层都是为了解决一个问题,他是解决一个硬件设备和另一个硬件设备在物理上怎么进行通信。通信得知道地址,所以“网络介质层”会最终封装出一个“MAC”地址,就是硬件的地址,来进行通信.


2 IP层

这一层,上面已经实现了一个设备到另一个设备物理上的连接,但是,我们需要的是真正接收的这个数据呢, 这个时候就需要确定是由谁来接收。那我们通过IP层给每个设备封装一个IP地址。

然后由交换机来进行分配,在这层程序成员需要做的是:IP地址建立连接,目前IP地址都是基于IPV4是4个字节的IP地址。这个网络层只需要知道IP对IP地址



     


    协议的目的是什么?协议是怎么实现的?

wKiom1loLyuRrQHIAACojYNXkKM331.png-wh_50

        

非常简单,原理也非常简单,我们就是在用户发送的数据加一层头,最后接收端在通过解包一层一层去掉。



为了深刻理解上面的图,我们下载一个抓包软件来看看,Wireshark,可以百度直接就可以下载,抓HTTP的协议看看

wKiom1loMerC7R5xAAJuYsmdR0Q902.png-wh_50

wKiom1loMimCYFUxAAAW9-2Xzv0413.png-wh_50

   随便抓到一个整包(Get的)

wKioL1loMoyClzdJAAHqh8N4IRg329.png-wh_50


先看下分析的内容

1  frame 最底层的帧数据,也就是说把TCP分层他会把数据

切包,切成一帧一帧的,

wKiom1loM2Ly6UvEAACGu3cijA4637.png-wh_50

 

2 Ethernet II 他对应的是链路层的MAC的地址,目标,源地址

wKioL1loM-Pz7mQDAAA9FpQyps4030.png-wh_50


3 Internet Protocol,这个就是上面讲的IP层,这里有目标ID

来源IP等信息,


wKioL1loNKyz4h1fAABQrTI_2FM626.png-wh_50



4 Transmission 传输层,端口号,原端口号,目标端口,


wKiom1loNSDjQziDAABbZZauXys958.png-wh_50



5 Hypertext Transfer Protocol应用层,图片中是

Http协议会发送一个Get请求过去


wKiom1loNXexCQqOAABI7D8MQg4324.png-wh_50

 

需要搞跨平台,需要用到Linux 。ubuntu 16.04 .先到这





 本文转自超级极客51CTO博客,原文链接:http://blog.51cto.com/12158490/1947450,如需转载请自行联系原作者






相关文章
|
15天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
15天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
14天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
38 6
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【PyTorch实战演练】AlexNet网络模型构建并使用Cifar10数据集进行批量训练(附代码)
【PyTorch实战演练】AlexNet网络模型构建并使用Cifar10数据集进行批量训练(附代码)
58 0
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【PyTorch实战演练】使用Cifar10数据集训练LeNet5网络并实现图像分类(附代码)
【PyTorch实战演练】使用Cifar10数据集训练LeNet5网络并实现图像分类(附代码)
60 0
|
2天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
9天前
|
数据采集 机器学习/深度学习 数据挖掘
网络数据处理中的NumPy应用实战
【4月更文挑战第17天】本文介绍了NumPy在网络数据处理中的应用,包括数据预处理、流量分析和模式识别。通过使用NumPy进行数据清洗、格式化和聚合,以及处理时间序列数据和计算统计指标,可以有效进行流量分析和异常检测。此外,NumPy还支持相关性分析、周期性检测和聚类分析,助力模式识别。作为强大的科学计算库,NumPy在处理日益增长的网络数据中发挥着不可或缺的作用。
|
14天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
18天前
|
Python
Python网络编程基础(Socket编程)UDP服务器编程
【4月更文挑战第8天】Python UDP服务器编程使用socket库创建UDP套接字,绑定到特定地址(如localhost:8000),通过`recvfrom`接收客户端数据报,显示数据长度、地址和内容。无连接的UDP协议使得服务器无法主动发送数据,通常需应用层实现请求-响应机制。当完成时,用`close`关闭套接字。
|
1月前
|
机器学习/深度学习 算法 PyTorch
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
55 2