C # декодировать байт [] отправлено из сокета Python - PullRequest
0 голосов
/ 16 октября 2018

В 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 datagram выше?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Я заставил его работать:

Удаление преобразования в 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#.

0 голосов
/ 16 октября 2018

Вы можете декодировать строку в кодировке Base 64 с помощью класса Convert .

byte[] inputBytes = Convert.FromBase64String(inputText);
string decodedText = System.Text.ASCIIEncoding.ASCII.GetString(inputBytes);

Важное

FromBase64String Метод предназначен для обработки единственной строки, которая содержит все данные для декодирования.Для декодирования символьных данных в формате base-64 из потока используйте класс System.Security.Cryptography.FromBase64Transform .

...