[Go] tcp服务下的数据传递
程序员文章站
2022-12-21 16:47:51
go中实现一个tcp服务,首先是要监听端口,接收请求,这个地方会被阻塞等待当客户端连接过来,会开一个grountine去处理这条客户端的tcp连接,因此可以同时处理多条连接 在连接中,要循环的去读取客户端传递过来的数据,这样就可以不停的处理客户端的请求数据在读取数据的时候,每次我只读一个字节,这样方 ......
go中实现一个tcp服务,首先是要监听端口,接收请求,这个地方会被阻塞等待
当客户端连接过来,会开一个grountine去处理这条客户端的tcp连接,因此可以同时处理多条连接
在连接中,要循环的去读取客户端传递过来的数据,这样就可以不停的处理客户端的请求数据
在读取数据的时候,每次我只读一个字节,这样方便查看接收到什么数据,因此读取数据的时候也要循环,拼接收到的数据,在这个循环中如果读取大小为0或者读取的这个字节为\n时,我就退出循环。
因为\n的ascii编码为10,所以我收到的这一个字节切片的数据tmpbyte[0]为10的时候就断掉
可以通过下面代码的运行看一下收取到的数据,客户端传递一个英文字符,和传递一个中文字符所收取到的具体数据,参照ascii对照表
客户端传递:a
服务端收到:
1 [97] 一个字节,ascii编码为97,对应 a
1 [13] 一个字节,ascii编码为13,对应 控制字符cr,归位键
1 [10] 一个字节,ascii编码为10,对应 控制字符lf,换行键
客户端传递:你
服务端收到:
1 [228] 三个字节
1 [189]
1 [160]
1 [13] 下面这俩和上面的意思一样
1 [10]
ascii编码下,一个英文字符一个字节,utf8编码下,一个中文字符三个字节
完整代码:
package main import ( "fmt" "net" ) func main() { //监听端口 listener, _ := net.listen("tcp", "0.0.0.0:5921") //循环阻塞接收,并发处理同时处理多个连接 for { conn, _ := listener.accept() go handleconn(conn) } } func handleconn(conn net.conn) { //循环不停的去处理数据 for { tmpbyte := make([]byte, 1) var resdata []byte //循环去读取数据 for { len, _ := conn.read(tmpbyte) fmt.println(len, tmpbyte) //读到的长度为0,或者读取到换行就断掉 if len == 0 || tmpbyte[0] == 10 { break } //拼接读到的数据 resdata = append(resdata, tmpbyte...) } str := fmt.sprintf("收到:%s\n", string(resdata)) conn.write([]byte(str)) } }
上一篇: 2-命令行入门
下一篇: Python 基础语法-str
推荐阅读
-
C语言学习之Linux下TCP服务器与客户端的实现
-
GO语言实现简单TCP服务的方法
-
linux下ftp的上传数据到服务器深入剖析
-
Linux下tcp服务器创建的步骤
-
[Go] tcp服务下的数据传递
-
AngularJS下$http服务Post方法传递json参数的实例
-
linux环境下解决solr7.4服务器多表导入数据覆盖的问题
-
OSI七层参考模型与TCP/IP五层参考模型、数据的封装、网络服务的讲解
-
Windows下通过FTP自动备份数据到服务器并删除指定天数前的备份
-
Node第3天知识点:在node当中使用art-template、处理GET方式传递的参数、处理POST方式传递数据、服务器端重定向、模块化