【Python】Python与C#的消息传递

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)

猜你喜欢

转载自blog.csdn.net/zigzagbomb/article/details/101212111