网络编程
文章平均质量分 84
介绍计算机通信的底层的一些知识
程序员一点
这个作者很懒,什么都没留下…
展开
-
tcp和socket有什么关系,与http又有什么联系?用最直白的语言从头到脚为你讲清楚
最近项目中需要自己去实现一个http的接口。所以趁这个机会跟大家讲一下http和socket的关系,以及与TCP又有什么联系。首先大家一定要明确一点,在网络分层架构当中,HTTP协议是属于应用层的,tcp协议是属于传输层的,也就是说它们是一种协议,是通信双方规定的一种规则,没有这种规则,两台主机就无法完成通信。而根据我们曾经所学的知识可以知道,两台主机要完成通信,必须在传输层规定一套相同的协议,至于要不要在传输层就建立连接,因协议而异,tcp协议是需要建立连接的,而udp就不需要。至于tcp和u原创 2021-01-25 14:36:33 · 642 阅读 · 0 评论 -
socket网络编程知识梳理,让你学会造轮子的能力
在前面几篇中,我给大家介绍了socket的相关知识,也给出了详细的代码,从socket的基本介绍,到IO多路复用,以及粘包拆包,最后到心跳包问题。总的来说大概都把socket网络编程中能碰见的问题都讲了,但肯定讲得不够深入,会有一些遗漏,如果有哪些知识点技术点的遗漏,欢迎大家指出,本人虚心接受。现在我将socket网络编程前面几篇讲的内容重新梳理一遍。《socket网络编程(一)——初识socket》。主要介绍了我们为什么需要socket,以及socket的相关函数,掌握这些函数你并不能写出很好的网原创 2020-11-15 10:53:54 · 216 阅读 · 0 评论 -
socket网络编程(六)——心跳包问题
1、为何需要心跳包问大家一个问题,如果客户端和服务端长时间没有相互发送数据的话,那么我们怎么来判断这个连接是否存在的呢?有些人可能很自然地说直接send一下不就可以了,确实可以这样进行判断,那么我们发送的时候可以选择发送任何东西,所以一般都是发送一个空包,这个就是心跳包。跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。所以说心跳包是一种保原创 2020-11-07 13:06:27 · 2386 阅读 · 0 评论 -
socket网络编程(五)——粘包拆包问题
目录1、出现粘包拆包的原因2、粘包拆包的几种情况3、处理粘包拆包的方法3.1、服务端代码3.2、客户端代码3.3、公用的部分今天和大家讲一下socket网络编程中粘包和拆包的问题。1、出现粘包拆包的原因假设一个这样的场景,客户端要利用send()函数发送字符“asd”到服务端,连续发送3次,但是服务端休眠10秒之后再去缓冲池中接收。那么请问10秒之后服务端从缓冲区接收到的信息是“asd”还是“asdasdasd”呢?如果大家有去做实验的话,可以知道服务端收到的是“asda原创 2020-11-05 23:53:32 · 771 阅读 · 0 评论 -
socket网络编程(四)——epoll多路复用问题
目录1、epoll诞生的原因2、epoll是什么3、具体实现3.1、服务端代码3.2、客户端代码4、epoll结构剖析1、epoll诞生的原因问大家一个问题,如果要设计一款有着千万级别并发的系统,你的客户端和服务端的网络通信底层该怎么设计?我在上一篇文章(计算机通信之谜,带你彻底理解socket网络编程(三))中有说到用select可以实现IO多路复用,但是select的设计有瓶颈所在,超过十万的并发效率就非常慢。那么着又该怎么办呢?于是epoll就腾空出世了!2原创 2020-11-03 19:23:31 · 396 阅读 · 0 评论 -
socket网络编程(三)——select多路复用问题
目录1、select诞生的原因2、具体实现2.1、服务端代码:2.1、客户端代码:3、select结构刨析4、新的问题,千万级的并发1、select诞生的原因在上文《计算机通信之谜,带你彻底理解socket网络编程(二)》我们提到了多客户端的时候,多台客户端发送数据到服务端的话,只能有一台客户端可以正常发送和接受数据,另外一台完全没有反应,那这个问题怎么解决呢?很多人可能第一反应想到利用多线程技术,线程多的话用线程池来维护。的确,多线程确实可以实现这个效果,但是,可能很多看见原创 2020-10-31 14:28:03 · 682 阅读 · 0 评论 -
socket网络编程(二)——实现持续发送
在《》一文里我们提到了,客户端发送了数据了之后,不管服务端还是客户端都close退出了,也就是说只能发送一次数据,这显然不符合实际的用途。那么该如何更改程序呢?要想实现持续发送,聪明的你可能想到了用循环,思路完全正确,但是循环多少次呢?实际的使用情况服务端一直都要运行,除非系统崩掉了,而客户端和服务端的长连接也要一直连着,除非客户端自己关闭了连接。所以我们的思路是双端都无限循环!所以可以用一个while(1)来循环,那么应该在哪里开始循环,这个要看自己具体的要求,如果要求三次握手只一次,随后发送数据的话进原创 2020-10-27 19:16:35 · 2484 阅读 · 0 评论 -
socket网络编程(一)——初识socket
出现一项技术,首先我们弄懂一下,为什么要出现。那么为什么要出现socket这玩意呢?可以很简单的用一句话来概括:为了实现两台计算机通信1、socket诞生的原因两台装有操作系统的机子要想实现通信,第一要联网,第二通信双方一定制定某种规则。我们平时最为常见的http请求也是一种通信协议,只不过它是属于应用层的。http协议将要发送的数据封装后,传到下面一层处理,这下一层就是传输层,也是我们今天要说的重点。应用层的数据封装之后要发到下面的传输层,那么传输层就需要对外提供接口,让应用层可以调用原创 2020-10-24 19:52:02 · 735 阅读 · 0 评论