socket多路IO复用之select模型

select模型是socket中的一种多路IO复用模型之一,通过轮询的方式来完成多路访问控制。 一个很简单的例子来描述select模型: 幼儿园老师要照顾所有的小朋友,每天他都会轮流去问小朋友:“小朋友小朋友,你饿了吗?” 如果小朋友饿了,那么老师就给这个小朋友喂饭,否则就开始询问下一个朋友,一直循...
阅读全文
TCP协议中的三次握手和四次挥手 TCP/IP

TCP协议中的三次握手和四次挥手

TCP协议的三次握手和四次挥手分别表示了TCP连接的建立和释放过程,在整个TCP协议是一个很重要的内容,同时也是面试时的常见考点。 趁着找工作的劲,使用socket+tcpdump分析了一下工作流程,socket客户端代可以在socket介绍及函数原语找到。服务端的代码可以在socket的selec...
阅读全文
Golang的socket编程(四):解决粘包问题及制定通信协议 Golang

Golang的socket编程(四):解决粘包问题及制定通信协议

一、概述 前面已经完成了一个完美的多并发CS模型,但美中不足的是没有解决粘包问题。 1.1 什么是粘包问题? 在网络传输中,数据都是通过数据流来传输的,也就是以比特来传输。传输的过程中我们可能会遇到各种各样的问题导致数据传输异常,最常见的就是网络发送时延。网络时延会导致服务端此时收到的数据的时间有偏...
阅读全文
Golang的socket编程(三):并发Server-Client Golang

Golang的socket编程(三):并发Server-Client

一、概述 上一篇实现了一个server和client通信,完成了小写转大写的功能,但是是一个单任务式的响应:客户端发送连接接收响应,程序结束;服务端则接收数据响应数据也结束!就实际需要而言,并没有很大的用处,所以现在我们就给客户端和服务端添加上并发功能。 逻辑其实很简单,就是利用golang的gor...
阅读全文
Golang的socket编程(二):简单client-server Golang

Golang的socket编程(二):简单client-server

一、概述 上一篇介绍了基本的函数和结构类型,这里就可以开始写服务端和客户端通信小程序了,通信的基本的流程如下: 如果服务端使用Listen来监听,那么可以不用ResolveTCPAddr函数。 现在我们就来写一个server和client,实现功能:client发送数据到server,server将...
阅读全文

Golang的socket编程(一):常用数据结构和函数介绍

工作的原因接触到socket,要使用socket实现一个长连接。之前只在C/C++上用过socket,而且在学校的时候也只是简单的做聊天室小程序,并没有涉及到长连接。突然用到工作项目上,心里还是有点悬的,毕竟网上的资料也不是很多。这里就一步一步记录下学习的过程、遇到的问题以及最重要的——解决问题的方...
阅读全文