php与tcp哪个快,PHP程序员如何理解TCP协议
理解成一个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协议相关推荐
- canvas小程序-快跑程序员
canvas不用说html5带来的好东西,游戏什么的,么么哒 记得有一天玩手机游戏,就是一个跳跃过柱子那种,其实元素很简单啊,app能开发,借助html5 canvas也可以啊,于是就开始了. --- ...
- 浅谈对程序员的认识_8年编程生涯回顾:谈谈我对程序员的理解
点击右上方关注我们,每天都能收到这样有趣有料的推文啦! (全文2000字,建议阅读时长5分钟) [文章为语录体问答形式] hello,大家好,我是阿琰. 今天这个文章主要是想讲一下我作为程序员对这个职 ...
- 程序员如何理解客户需求
作为A8U扎金花技术人员,精力都投入到技术上,那么我们,程序员,热爱计算机技术.当你的客户或老板,大声的脱口说出他们想要的东西时,我们无法阻止,我们只能想象如何去实现它们. 但是,我们需要用更全面的眼 ...
- 赔97.6万元!腾讯一程序员违反竞业协议,三年白干了!
近日,中国裁判文书网发布了一则公告,内容显示:原告孙某需在判决生效之日起,7日内返还竞业限制补偿金15.8万元,同时将支付高达97.6万元的竞业限制违约金.咋回事? 判决书截图 原来,程序员孙某于20 ...
- 程序员为什么不自己写程序去卖?只有老程序员才理解的道理
我以前就这么干过,干不下去了,因为个人写不了大型程序,只能写小程序,小程序也很难接单,接了单也很容易被客户坑跑单.而且接的单会越来越触犯规定,搞不好就进去了. 写程序只是一项技能,和人力资源,财务,销 ...
- 程序员才能理解的20张动图,你懂几个?
图自:网络 下面这些动图你能理解几个? ▼▼▼ 「0」只改了一行代码-- 「1」产品经理第10次改需求后, 告诉我还是用第一版 「2」赶工三个月的项目, 第一次启动整体测试时 「3」当程序员打开了遗留 ...
- .NET程序员应该理解的几种软件保护方法 辛苦开发的程序需要建立有效的保护机制...
使用.NET开发程序,因为元数据存在于程序集中,可以轻易的被反编译成源代码.在分发给客户之间,会应用加密软件混淆程序集,这样让程序集被反编译时, 理解起来困难一些,增加一点破解难度.以下列举我常见到的 ...
- 9-51单片机ESP8266学习-AT指令(测试TCP服务器--51单片机程序配置8266,C#TCP客户端发信息给单片机控制小灯的亮灭)...
http://www.cnblogs.com/yangfengwu/p/8780182.html 自己都是现做现写,如果想知道最终实现的功能,请看最后 先把源码和资料链接放到这里 链接:https:/ ...
- ioc di php,PHP程序员如何理解IoC/DI
思想 思想是解决问题的根本 思想必须转换成习惯 构建一套完整的思想体系是开发能力成熟的标志 --<简单之美>(前言) . "成功的软件项目就是那些提交产物达到或超出客户的预期的项 ...
最新文章
- 全球富豪大洗牌!马斯克登顶世界首富,黄铮国内第三超马云
- 基于口令的密码PBE(Password Based Encryption)
- wordpress 主题教程-笔记
- C/C++ 通过初始化列表和构造函数内赋值初始化成员变量的区别
- y空间兑换代码_loam代码解析3
- python session模块_Python requests模块session代码实例
- java中如何实现货币兑换_java货币转换
- python傅里叶变换相位谱图_[转载]图像傅立叶变换及相位谱
- win10系统任务栏透明方法
- SCL编写的阀门块实例
- @PropertySource 注解的使用
- 计算机休眠会断电吗,电脑「睡眠」和「休眠」原来有这么大区别,下次别用错了。...
- mac pdf分割方法,及其方便!!
- 《微观经济学》 第七章
- Windows上那些值得推荐的良心软件-整理
- 算法竞赛进阶指南0x12:Team Queue
- 微信小程序开发的app---礼物说APP
- Q_ENUM与Q_ENUMS的区别
- 教资之教学知识与能力第三章第二节教学过程
- IPS—线束和柔性管路三维仿真解决方案
热门文章
- c语言 系统命令,c语言如何调用系统命令
- 深度学习-机器学习(5.2支持向量机SVM)
- C++学习笔记5[函数]
- 广度优先搜索算法BFS讲解以及python 实现
- VTK:图像高斯平滑用法实战
- JavaScript实现isPowerOfTwo算法(附完整源码)
- wxWidgets:使用自定义对话框
- boost::type_erasure::binding相关的测试程序
- boost::geometry::range_by_section用法的测试程序
- boost::geometry::for_each_coordinate用法的测试程序