欢迎光临散文网 会员登陆 & 注册

Go语言TCP编程【精简】

2022-11-06 11:09 作者:苦茶今天断更了吗  | 我要投稿

看完上一篇【Go语言网络编程、TCP(海量用户即时通讯系统)】就很好懂这一篇了

Go语言TCP编程

TCP协议为传输控制协议,TCP协议有以下几个特点:

1. TCP是面向连接的传输层协议;

2. 每条TCP连接只能有两个端点,每条TCP连接是点到点的通信;

3. TCP提供可靠的交付服务,保证传送的数据无差错,不丢失,不重要且有序;

4. TCP提供全双工通信,允许双方在任何时候都能发送数据,为此TCP连接的两端都设有发送缓存接收缓存,用来临时存放双向通信的数据;

5. TCP是面向字节流的;

 

发送缓存用来暂存以下数据:

① 发送应用程序传送给发送方TCP准备发送的数据;

② TCP已发送但尚未收到确认的数据;

接收缓存用来暂存以下数据:

① 按序到达但尚未被接收应用程序读取的数据;

② 不按序到达的数据;

因为是面向连接的协议,数据像水流一样传输,会存在黏包问题

 

TCP连接

一个TCP服务端可以同时连接很多个客户端,Go语言可以使用go关键字开启goroutine,每建立一个连接就创建一个goroutine,这样可以并发执行每一个创建的连接.

tcp服务端主要的处理流程有:

1. 监听端口;

2. 接收客户端请求创建tcp连接;

3. 使用go关键字开启goroutine处理每一个建立的连接,收发数据;

4. 关闭连接;

tcp客户端主要的处理流程有:

1. 建立与服务端的连接;

2. 收发数据;

3. 关闭连接;

 

关于tcp通信一般会使用到bufio,net,strings,os包.

bufio包主要用来做输入输出数据的缓存,

bufio.NewReader()函数可以传递os.Stdin类型,os.Stdin为标准输入;

os.NewReader()函数返回的是一个新的带有4096 byte大小缓冲区的Reader结构体指针类型,通过Reader可调用很多方法,比如ReadString(delim byte) (string,error)可一直从标准输入中读取数据,直到遇到指定的终止符号delim,并且读取的内容会包含当前的delim;

net包主要是连接的监听、创建,以及连接数据的读取和写入(例如tcp,udp等网络编程)等相关工作,tcp服务端中可以使用一个process()函数传递一个net.Conn类型即*net.TCPConn类型的变量conn(TCPConn结构体实现了Conn接口),*TCPConn类型可调用很多方法。可调用*TCPConn类型的read()方法读取tcp连接的数据,然后输出数据即可,服务端可以使用net.Listen()函数监听连接,使用Accept()方法建立tcp连接,客户端则可以使用net.Dial()连接创建的tcp连接,使用conn接口的实现*TCPConn(Dial()方法的返回值就是*TCPConn类型)调用conn的read()方法将读取tcp连接的内容,write()方法将数据写入到tcp连接中;strings包主要是对读取到的数据的字符串形式进行处理,比如去除掉字符串的一些符号等等。

Go语言TCP编程【精简】的评论 (共 条)

分享到微博请遵守国家法律