Я новичок в python сокетах и хочу написать send(data: any)
, который будет обрабатывать любые типы данных через сокет, но есть некоторые проблемы. Я сделал это так:
def send(self, data: any):
if type(data) is not bytearray:
b = bytearray()
b.extend(map(ord, data))
self.__s__.sendall(b) # s is the socket
else:
self.__s__.sendall(data)
def recv(self, len_of_packet: int):
buf = bytearray()
while len(buf) < len_of_packet:
buf = buf.append(self.__s__.recv(len_of_packet - len(buf)))
return buf
но это дает мне
buf = buf.append(self.__s__.recv(len_of_packet - len(buf)))
TypeError: 'bytes' object cannot be interpreted as an integer
Я сделал это oop в recv()
, поскольку сокеты TCP могут отправлять только часть данные я также сделал if type(data) is not bytearray:
, потому что sendall()
хочет только байты, но по какой-то причине это не работает. Я пытался использовать bytes()
, но были другие ошибки. Итак, какой самый pythoni c способ отправить любые данные и получить их на другом конце? Особенно я хочу отправить картинки и текст. И как обработать тот факт, что recv()
возвращает str (), который я хочу быть байтами?
Пример вызова:
image = open('image.jpg', 'rb').read()
con.send(image)
, а на другом конце:
image = con.recv(size)