Python 与 C# 的消息传递
最近和小伙伴在做一些小项目时,神乎其技凑出Python做服务器,C#做客户端的组合,大家各显神通,路子要多野有多野_| ̄|●
使用Json作为中间文件
在两种不同的语言之间通信,需要有一个统一的数据交换格式,无疑Json成为了我们的首选。
由于菜的真实,均对对方语言如何转换感到迷惑,这里贴出Json转化对照表:
Python | Json | C# |
---|---|---|
dict | object | class |
list, tuple | array | list |
str, unicode | string | string |
int, long, float | number | int,long,float |
True | true | true |
False | false | false |
None | null | null |
这只两边对应统一消息格式,就可以轻松实现Json作为中间文件。
对于C#而言,我们需要引入Newtonsoft.Json (或者其他能进行Json操作的包都行,Json官网都能下载到),以Newtonsoft.Json为例,主要使用了:
函数 | 含义 |
---|---|
JsonConvert.SerializeObject(object value) | 将类序列化成Json字符串 |
JsonConvert.DeserializeObject<T>(string value) | 将Json字符串反序列成成指定类 |
对于Python而言,使用 JSON 函数需要导入 json 库:import json。
函数 | 含义 |
---|---|
json.dumps | 将 Python 对象编码成 JSON 字符串 |
json.loads | 将已编码的 JSON 字符串解码为 Python 对象 |
大端与小端问题
本来这个问题按理说不会出现,由于使用了Socket,在处理分包与粘包时,一些奇妙操作让我不得不记录下这个问题,接下贴出关键部分:
C#客户端:
Python服务端:
我们这里采用了最简单的方式处理分包与粘包,即长度+消息内容。结果运行起来总是不对,服务器端似乎接收不到任何东西,经过反复调试,发现是长度的解析有问题:
C# BitConverter.GetBytes 方法发送的数据是:
11 0 0 0 (大小为:11)
Python head中的数据是:
b’\x0b\x00\x00\x00’ (大小为:184549376)
很明显C#是以小端法在处理数据,而Python在以大端法处理,这一切都源于自信的感叹号! ᕙ༼ ͝°益° ༽ᕗ
换成=世界和平了( ̄▽ ̄)~*
实力低下,请多包涵 (*・ω-q)