您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > C/C++/C#

数据如何在网络上传输?掌握这些小知识,编程将不再呆板无趣

时间:2020-05-12 10:27:12  来源:  作者:

数据如何在网络上传输?掌握这些小知识,编程将不再呆板无趣

 

本文主要介绍的是C语言网络编程基础,介绍一些网络常识,这希望对于广大读者学习C/C++有一些帮助。更多浅显的C语言、C++,windows知识,持续关注我吧!

什么是socket?

Socket的英文原义是“孔”或“插座”。在编程中,Socket被称做 套接字,是网络通信中的一种约定。Socket编程的应用无处不在,我们平时用的QQ、微信、浏览器等程序,都与Socket编程有关。我们平时使用浏览器查资料,这个过程的技术原理是怎样的呢?

数据如何在网络上传输?掌握这些小知识,编程将不再呆板无趣

 

我们平时使用浏览器,大致就是这样的一个过程。这里有两个重要的名词: 服务端与 客户端。

Socket编程的目的就是如何实现这两端之间的通信。

Socket编程在编程开发中很重要

Socket编程不仅仅在互联网方面很重要,在我们的嵌入式方面也是非常的重要,因为现在很多电子设备都趋向于联网。比如很多编程行业的招聘要求都会有这一条要求:

数据如何在网络上传输?掌握这些小知识,编程将不再呆板无趣

 

说一点题外话,还在学校的朋友,如果感觉到很迷茫,不知道学什么的时候,可以上招聘网站上看看自己未来工作相关的职位的任职要求,这样就可以总结自己的一些不足、比较有针对性的去学习。

Socket编程中的几个重要概念

Socket编程用于解决我们 客户端与 服务端之间通信的问题。我们平时多多少少都有听过IP地址、端口、TCP协议、UDP协议等概念,这些都与Socket编程中相关,想要知道怎么用起来,当然得先了解它们的一些介绍。下面看一下这些专业术语的一些要点介绍:

1、什么是IP地址?

IP地址(Inte.NETProtocolAddress)是指互联网协议地址,又译为 网际协议地址。IP地址被用来给Internet上的电脑一个编号。我们可以把“个人电脑”比作“一台电话”,那么“IP地址”就相当于“电话号码”。若计算机1知道计算机2的IP地址,则计算机1就能访问计算机2。

IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用 点分十进制表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。

IP地址有 IPv4与 IPv6之分,现在用得较多的是IPv4。其中,有一个特殊的IP地址需要我们记住: 127.0.0.1,这是回送地址,即本地机,一般用来测试使用。后边我们的实例中会用到。

关于IP地址还有很多知识要点,但是对于在Socket编程中的应用,我们暂且知道这么多就可以。

2、什么是TCP/IP端口?

上一点中我们提到,若计算机1知道计算机2的IP地址,则计算机1就能访问计算机2。但是,我们要访问计算机2中的不同的应用软件,则还得需要一个信息: 端口。端口使用16bit进行编号,即其范围为: 0~65536。但 0~1023 的端口一般由系统分配给特定的服务程序,例如 Web 服务的端口号为 80,FTP 服务的端口号为 21等。

3、什么是协议?

协议(Protocol)是通信双方进行数据交互的一种约定。如TCP、UDP协议:

TCP协议

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,数据可以准确发送,数据丢失会重发。TCP协议常用于web应用中。

TCP连接(三次握手)

TCP传输起始时,客户端、服务端要完成三次数据交互工作才能建立连接,常称为三次握手。可形象比喻为如下对话:

客户端:服务端您好,我有数据要发给你,请求您开通访问权限。

服务端:客户端您好,已给您开通权限,您可以发送数据了。

客户端:收到,谢谢。

具体示意图为:

数据如何在网络上传输?掌握这些小知识,编程将不再呆板无趣

 

这里的SYN和ACK是都是标志位,其中SYN代表新建一个连接,ACK代表确认。其中m、n都是随机数。具体说明如:

  • 第一次握手:SYN标志位被置位,客户端向服务端发送一个随机数m。
  • 第二次握手:ACK、SYN标志位被置位。服务端向客户端发送m+1表示确认刚才收到的数据,同时向客户端发送一个随机数n。
  • 第三次握手:ACK标志被置位。客户端向服务端发送n+1表示确认收到数据。

TCP断开(四次挥手)

TCP断开连接时,客户端、服务端要完成四次数据交互工作才能建立连接,常称为四次挥手。可形象比喻为如下对话:

客户端:服务端您好,我发送数据完毕了,即将和您断开连接。

服务端:客户端您好,我稍稍准备一下,再给您断开

服务端:客户端您好,我准备好了,您可以断开连接了。

客户端:好的,合作愉快!

具体示意图为:

数据如何在网络上传输?掌握这些小知识,编程将不再呆板无趣

 

这里的FIN也是一个标志位,代表断开连接。具体说明类似三次握手

为什么建立连接只需要三次数据交互,而断开连接需要四次呢?

建立连接时,服务端在监听状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。

而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

UDP协议

UDP(User Datagram Protocol, 用户数据报协议)是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,可以保证通讯效率,传输延时小。例如视频聊天应用中用的就是UDP协议,这样可以保证及时丢失少量数据,视频的显示也不受很大影响。

4、什么是协议族?

协议族是多个协议的统称。比如我们的TCP/IP协议族,其不仅仅是TCP协议、IP协议,而是多个协议的集合,其包含IP、TCP、UDP、FTP、SMTP等协议。

TCP、UDP通信的socket编程过程图

(1)TCP通信socket编程过程

数据如何在网络上传输?掌握这些小知识,编程将不再呆板无趣

 

(2)UDP通信socket编程过程

数据如何在网络上传输?掌握这些小知识,编程将不再呆板无趣

 

尾言

由于篇幅问题,关于socket的编程应用实例敬请期待,文章都是手打原创,每天最浅显的介绍C语言、C++,windows知识,喜欢我的文章就关注一波吧,每天带你学习C/C++不同的知识,也可以看到最新更新和之前发表的文章哦。如果足下基础比较差,不妨关注下人人都可以学习的视频教程



Tags:数据 传输   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
本文主要介绍的是C语言网络编程基础,介绍一些网络常识,这希望对于广大读者学习C/C++有一些帮助。更多浅显的C语言、C++,windows知识,持续关注我吧!什么是socket?Socket的英文原...【详细内容】
2020-05-12  Tags: 数据 传输  点击:(93)  评论:(0)  加入收藏
▌简易百科推荐
在go语言中使用viper之类的库很方便的处理yaml配置文件,但是在c语言中就比较麻烦,经过一番思索和借助强大的github,发现了一个libyaml c库,但是网上的例子都比较麻烦,而且比较繁...【详细内容】
2022-07-07  全栈搬砖家    Tags:yaml   点击:(19)  评论:(0)  加入收藏
目前数据的种类非常多,每种数据都支持sql语句,但是大家发现没有每种数据的SQL都有自己的语法特性,都是SQL语句都没有一个特定的语法标准,导致开发人员在开发的过程中无法任意选...【详细内容】
2022-07-05  海椰人    Tags:SQL语句   点击:(21)  评论:(0)  加入收藏
今天给大家分享一篇C语言编码规范,可以从源头上规避掉很多bug,希望能对大家有所帮助。 01 最重要的规则编写代码时最重要的一条规则是:检查周围的代码并尝试模仿它。 作为维护...【详细内容】
2022-07-04  嵌入式Linux    Tags:C语言   点击:(22)  评论:(0)  加入收藏
什么编程语言最好?这是个能让各路程序员吵翻天的话题,每种语言都有自己的拥趸,全球现在找出三五十种编程语言都不是问题,热门的至少也有20种,先不说这些语言好用与否,它们的性能也...【详细内容】
2022-07-01  HAIFEIX    Tags:编程语言   点击:(29)  评论:(0)  加入收藏
描述使用C#.Net开发的Windows远程控制管理系统SiMay,底层基于IOCP的异步通信模型,实时监控海量客户端,目前功能已实现:逐行扫描远程桌面协助、经典的文件管理、实时远程语音、实...【详细内容】
2022-06-30  IT微部落    Tags:C#   点击:(36)  评论:(0)  加入收藏
1.如何远程调试服务器的windows 服务-远程调试 远程服务调试前提:要确保你的代码和服务在同一个域下才可以 1)首先要在你vs的根目录下找到 Remote Debugger 文件夹,复制到带有...【详细内容】
2022-06-16  中年农码工    Tags:C#   点击:(57)  评论:(0)  加入收藏
描述一款高性能敏感词(非法词/脏字)检测过滤组件,附带繁体简体互换,支持全角半角互换,汉字转拼音,模糊搜索等功能。同时支持多种语言,C#、golang、java、javascript、python参数...【详细内容】
2022-06-14  IT微部落    Tags:C#   点击:(51)  评论:(0)  加入收藏
讲故事前几天看公司一个新项目使用了FluentValidation,大家都知道FluentValidation是一个非常强大的用于构建强类型验证规则的 .NET 框架,帮程序员解决了繁琐的校验问题,用起来...【详细内容】
2022-06-08  黑哥聊dotNet    Tags:FluentValidation   点击:(53)  评论:(0)  加入收藏
C语言中没有参数默认值的概念,但其实可以利用宏来模拟参数的默认值;我们之前介绍过可变参数宏与逗号运算符,将两者相结合的话可以定义出以下形式的宏:#define func(...) __fun...【详细内容】
2022-06-04  嵌入式ICU    Tags:C语言   点击:(66)  评论:(0)  加入收藏
请大家看下面的题目,应该选择哪个答案呢?选择题 1首先,此类题目每年的考试都会出现,也就是说,标识符这个知识点非常重要。此类题目一般都是送分题 ,只要掌握了标识符的命名规则,这...【详细内容】
2022-05-20  正直的苏离    Tags:标识符   点击:(74)  评论:(0)  加入收藏
站内最新
站内热门
站内头条