如何理解网络传输协议?
以前一直做PHP,只处理HTTP超文本数据,后来转底层开发语言,对于TCP数据的传输不太理解,比如iOS客户端发送了数据包,到了Go的服务端,却可以解出数据类型来判断使用哪种方法进行处理,这里面是如何实现的?
传输给Go服务的数据是Payload字节码,没有文本内容定义,但最后却可以解出结构类名。
switch msg.(type) {
case *mtproto.RawMessageData:
rawMsg, _ := msg.(*mtproto.RawMessageData)
default:
err = fmt.Errorf("invalid msg, msg: %#v", msg)
}
iOS传递来的数据是这样的
Payload:[8 213 170 149 157 249 255 255 255 255 1 18 12 24 9 40 161 138 220 222 223 252 255 207 77] Attachment:[33 5 215 251 229 255 159 77 201 104 109 152 83 157 46 255 16 95 208 199 116 229 234 133 241 60 194 6 190 182 153 206 65 228 89 231 82 207 219 56 135 30 105 51 138 193 122 183 235 227 16 58 100 240 243 185 201 124 148 123 38 125 142 35 57 69 208 250 79 191 148 169 122 104 185 123 151 24 116 235 118 4 174 159 50 110 106 131 215 162 173 44 123 174 91 184 1 233 114 168 167 1 182 182 217 28 235 220 149 144 131 164 54 79 67 77 145 220 193 73 243 105 215 119 76 106 190 142 254 50 11 139 186 238 61 182 255 132 228 163 134 227 177 165 7 159 206 110 14 212 0 177 117 233 161 245 252 62 161 119 149 43 130 199 148 137 183 143]} payload=[8 213 170 149 157 249 255 255 255 255 1 18 12 24 9 40 161 138 220 222 223 252 255 207 77]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
就是按字节处理啊,哪怕你 HTTP 文本协议不也是字节?
字符
a
对应 UTF-8 字节就是97
,你以为你比较的是'a' === 'a'
,在机器看来就是97 === 97
。另外你这个问题跟 TCP 无关,完全就是序列化和反序列化的问题。最流行的基于文本的序列化方案就是 JSON;你这个是基于字节流的序列化方案了,具体咋实现的啥,看代码啊,谁知道你用的啥?