从python套接字发送的c#解码byte []

时间:2018-10-16 19:02:25

标签: c# json python-3.6

在python中,我将dictionary转换为json string,使用标准python encoding,然后使用base64进一步encode通过这样的socket发送。

item.datalist中的dictsmyconverter可以处理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}}代码等效的部分是什么?

2 个答案:

答案 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); }

现在,我可以同时从pythonC#中读取数据了。