在python中,我将dictionary
转换为json
string
,使用标准python encoding
,然后使用base64
进一步encode
通过这样的socket
发送。
item.data
是list
中的dicts
。 myconverter
可以处理datetime
。
UDP_IP = "127.0.0.1"
UDP_PORT = 5005
print("UDP target IP:", UDP_IP)
print("UDP target port:", UDP_PORT)
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
def myconverter(o):
if isinstance(o, datetime.datetime):
return o.__str__()
async def main_loop()
....
async for item in streamer.listen():
for index, quoteDict in enumerate(item.data):
quote = json.dumps(quoteDict, default = myconverter)
sock.sendto(base64.b64encode(quote.encode('ascii')), (UDP_IP, UDP_PORT))
当我使用python
这样通过socket
发送数据时,一切正常:
import socket
import json
import base64
UDP_IP = "127.0.0.1"
UDP_PORT = 5005
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(16384) # buffer size is 16384 bytes
quote_dict = base64.b64decode(data)
print(quote_dict)
与C#
decodes
python
enconded
的{{1}}代码等效的部分是什么?
答案 0 :(得分:1)
您可以使用Convert类对基数为64的字符串进行解码。
byte[] inputBytes = Convert.FromBase64String(inputText);
string decodedText = System.Text.ASCIIEncoding.ASCII.GetString(inputBytes);
重要
FromBase64String
方法旨在处理单个字符串 包含所有要解码的数据。解码64位字符 来自流的数据,请使用 System.Security.Cryptography.FromBase64Transform类。
答案 1 :(得分:0)
我了解它的工作依据:
执行以下操作,将转换为base64
中的python
:
sock.sendto(quote.encode('UTF-8'), (UDP_IP, UDP_PORT))
然后在C#
中,我只使用此功能:
static string GetString(byte[] bytes) {
return Encoding.UTF8.GetString(bytes); }
现在,我可以同时从python
和C#
中读取数据了。