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, )
var resData []byte
//循环去读取数据
for {
len, _ := conn.Read(tmpByte)
fmt.Println(len, tmpByte)
//读到的长度为0,或者读取到换行就断掉
if len == || tmpByte[] == {
break
}
//拼接读到的数据
resData = append(resData, tmpByte...) }
str := fmt.Sprintf("收到:%s\n", string(resData))
conn.Write([]byte(str))
}
}

最新文章

  1. 【Swift】iOS UICollectionView 计算 Cell 大小的陷阱
  2. vs2010 sql server 2008数据库管理界面安装
  3. 【转】Linux安装方法一(U盘引导)
  4. Javascript中的Bind 、Call和Apply
  5. codeforces 620F. Xors on Segments
  6. 查看某个ip地址接在交换机的哪个接口
  7. JavaScript中的DOM函数与关键字汇总
  8. C语言中不同变量的访问方式
  9. NOIP2017 列队
  10. PAT1002:A+B for Polynomials
  11. MongoDB数据库的设计规范
  12. 转:LRU算法
  13. PHP删除当前目录及其目录下的所有文件
  14. 学习笔记:fhq-treap
  15. STL基础--容器
  16. Spring @Autowired、@Resource、@Required、@Component、@Repository、@Service、@Controller注解的用法和作用
  17. 【POJ 2154】 Color (置换、burnside引理)
  18. laravel前后端分离的用户登陆 退出 中间件的接口与session的使用
  19. 快速开发框架(FDMS)新增1000个对外接口都不须要手写一行代码
  20. su: warning: cannot change directory to : Permission denied ;-bash: bash_profile: Permission denied

热门文章

  1. m3u8视频格式分析
  2. iOS网络开发—POST请求和GET请求
  3. Android Gradle 学习笔记(三):Gradle 日志
  4. 剑指offer 23:从上往下打印二叉树
  5. mysql5.7 Multiple-Column Indexes 多列索引(二)
  6. How to recover a skipped tablespace after an incomplete recovery? (Doc ID 1561645.1)
  7. npm i xxxx -D和npm i xxxx-S的区别
  8. MongoDB学习笔记(一、MongoDB入门)
  9. SDN课程阅读作业(2)
  10. 安装office2010出现的一些问题