理解成一个TCP连接就是两根相反流动的水管,水就是其中的数据,

数据是没有边界的,水流也没有界限,因此你需要根据水流的大小,来截取对应的数据,解码成你需要的数据。

比如协议规定tcp 的头部2个字节表示长度,余下的字节表示body部分的具体内容(具体协议可以自定义)

于是我在第一次读取数据的时候,先读取2个字节,然后把这两个字节转成10进制,就是body的长度. 然后重新生成body的数组,继续读:var conn net.Conn

type YourStruct struct {

Username string `json:"username"`

}

for {

b := make([]byte, 2)

_, err := io.ReadFull(conn, b)

if err != nil {

return

}

length := binary.BigEndian.Uint16(b)

body := make([]byte, length)

_, err = io.ReadFull(conn, body)

if err != nil {

return

}

// 解析结构体

var v = new(YourStruct)

json.Unmarshal(body, v)

fmt.Println(v.Username)

}

写数据也是一样的道理:先计算需要写的长度,转换成byte数组发送,然后再发送body。var conn net.Conn

type YourStruct struct {

Username string `json:"username"`

}

for {

v := YourStruct{Username: "hahah"}

data, _ := json.Marshal(v)

header := make([]byte, 2)

binary.BigEndian.PutUint16(header, uint16(len(data)))

// 写头

conn.Write(header)

// 写body

conn.Write(data)

}

tcp的边界定义就是跟据你定的协议,组装好数据包,发送的时候组装包,获取的时候拆包.

2个字节的头,body最长应该是65535个字节,超过这个长度,header就应该增加长度

php与tcp哪个快,PHP程序员如何理解TCP协议相关推荐

  1. canvas小程序-快跑程序员

    canvas不用说html5带来的好东西,游戏什么的,么么哒 记得有一天玩手机游戏,就是一个跳跃过柱子那种,其实元素很简单啊,app能开发,借助html5 canvas也可以啊,于是就开始了. --- ...

  2. 浅谈对程序员的认识_8年编程生涯回顾:谈谈我对程序员的理解

    点击右上方关注我们,每天都能收到这样有趣有料的推文啦! (全文2000字,建议阅读时长5分钟) [文章为语录体问答形式] hello,大家好,我是阿琰. 今天这个文章主要是想讲一下我作为程序员对这个职 ...

  3. 程序员如何理解客户需求

    作为A8U扎金花技术人员,精力都投入到技术上,那么我们,程序员,热爱计算机技术.当你的客户或老板,大声的脱口说出他们想要的东西时,我们无法阻止,我们只能想象如何去实现它们. 但是,我们需要用更全面的眼 ...

  4. 赔97.6万元!腾讯一程序员违反竞业协议,三年白干了!

    近日,中国裁判文书网发布了一则公告,内容显示:原告孙某需在判决生效之日起,7日内返还竞业限制补偿金15.8万元,同时将支付高达97.6万元的竞业限制违约金.咋回事? 判决书截图 原来,程序员孙某于20 ...

  5. 程序员为什么不自己写程序去卖?只有老程序员才理解的道理

    我以前就这么干过,干不下去了,因为个人写不了大型程序,只能写小程序,小程序也很难接单,接了单也很容易被客户坑跑单.而且接的单会越来越触犯规定,搞不好就进去了. 写程序只是一项技能,和人力资源,财务,销 ...

  6. 程序员才能理解的20张动图,你懂几个?

    图自:网络 下面这些动图你能理解几个? ▼▼▼ 「0」只改了一行代码-- 「1」产品经理第10次改需求后, 告诉我还是用第一版 「2」赶工三个月的项目, 第一次启动整体测试时 「3」当程序员打开了遗留 ...

  7. .NET程序员应该理解的几种软件保护方法 辛苦开发的程序需要建立有效的保护机制...

    使用.NET开发程序,因为元数据存在于程序集中,可以轻易的被反编译成源代码.在分发给客户之间,会应用加密软件混淆程序集,这样让程序集被反编译时, 理解起来困难一些,增加一点破解难度.以下列举我常见到的 ...

  8. 9-51单片机ESP8266学习-AT指令(测试TCP服务器--51单片机程序配置8266,C#TCP客户端发信息给单片机控制小灯的亮灭)...

    http://www.cnblogs.com/yangfengwu/p/8780182.html 自己都是现做现写,如果想知道最终实现的功能,请看最后 先把源码和资料链接放到这里 链接:https:/ ...

  9. ioc di php,PHP程序员如何理解IoC/DI

    思想 思想是解决问题的根本 思想必须转换成习惯 构建一套完整的思想体系是开发能力成熟的标志 --<简单之美>(前言) . "成功的软件项目就是那些提交产物达到或超出客户的预期的项 ...

最新文章

  1. 全球富豪大洗牌!马斯克登顶世界首富,黄铮国内第三超马云
  2. 基于口令的密码PBE(Password Based Encryption)
  3. wordpress 主题教程-笔记
  4. C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
  5. y空间兑换代码_loam代码解析3
  6. python session模块_Python requests模块session代码实例
  7. java中如何实现货币兑换_java货币转换
  8. python傅里叶变换相位谱图_[转载]图像傅立叶变换及相位谱
  9. win10系统任务栏透明方法
  10. SCL编写的阀门块实例
  11. @PropertySource 注解的使用
  12. 计算机休眠会断电吗,电脑「睡眠」和「休眠」原来有这么大区别,下次别用错了。...
  13. mac pdf分割方法,及其方便!!
  14. 《微观经济学》 第七章
  15. Windows上那些值得推荐的良心软件-整理
  16. 算法竞赛进阶指南0x12:Team Queue
  17. 微信小程序开发的app---礼物说APP
  18. Q_ENUM与Q_ENUMS的区别
  19. 教资之教学知识与能力第三章第二节教学过程
  20. IPS—线束和柔性管路三维仿真解决方案

热门文章

  1. c语言 系统命令,c语言如何调用系统命令
  2. 深度学习-机器学习(5.2支持向量机SVM)
  3. C++学习笔记5[函数]
  4. 广度优先搜索算法BFS讲解以及python 实现
  5. VTK:图像高斯平滑用法实战
  6. JavaScript实现isPowerOfTwo算法(附完整源码)
  7. wxWidgets:使用自定义对话框
  8. boost::type_erasure::binding相关的测试程序
  9. boost::geometry::range_by_section用法的测试程序
  10. boost::geometry::for_each_coordinate用法的测试程序