Skip to content

screw-coding/screw-tiny-tcp-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

screw-tiny-tcp-server

go实现最简单的tcp客户端和服务端,实现带自定义包结构的tcp客户读和服务端

目录结构

├── go.mod
├── pack_client_server
│ ├── pack_client.go 带构建包和解析包的客户端
│ ├── pack_server.go 带构建包和解析包的服务端
│ └── protocol.go
├── README.md
└── toy_client_server
  ├── toy_client.go 最简单的TCP客户端
  └── toy_server.go 最简单的TCP服务端

说明

因为TCP是流式传输,可能出现客户端发送的内容,分成多段流到达服务端,如果服务端总是认为每次都是客户端一次发送的完整的内容,就会出现内容不完整的问题,因此需要在服务端处理检测内容是否完整的问题 也就是面试中常出现的:TCP"粘包"问题如何处理?

我个人看法是TCP协议不存在"粘包"问题,应用层才有"粘包"问题,不过这本来就是要开发者自己处理的

toy_client.go运行后,在toy_server.go上可以看到,不一定是一个一个收的,日志里会显示不定长的消息在一起

而在pack_server中,每次都是一个完整的信息