Code: Alles auswählen
self.request.recv(32)
Sollte man am Anfang einer Message die Datenlänge übertragen, oder kann man das auch noch auf andere Art feststellen? Da ich ein Bytearrray haben will, scheidet so etwas wie EOL aus.
Code: Alles auswählen
self.request.recv(32)
Code: Alles auswählen
def _read_n_bytes(sock, n):
buf = []
while n > 0:
data = sock.recv(n)
n -= len(data)
buf.append(data)
return ''.join(buf)
Das wäre eigentich mehr gedacht um PDF Dateien an mehrere Schüler zu übertragen, wollte nur wissen, welche Längen gehen. Ein Streaming Protokoll möchte ich freilich auch noch haben. Das werde ich dann aber nicht selber machen.Sirius3 hat geschrieben:@Alfons Mittelmeyer: Pufferlängen von einigen MB sind unproblematisch. Aber wenn Du MP3-Dateien übertragen willst, ist wohl ein Streaming-Protokoll besser geeignet als ein Block-Protokoll.
Code: Alles auswählen
def read_message(self,socket):
buf = []
# get length
n = 4
while n > 0:
data = socket.recv(n)
if len(data) == 0: return None
n -= len(data)
buf.append(data)
n = int.from_bytes(b''.join(buf), byteorder='big')
# get data
while n > 0:
if n > 1024: buflen = 1024
else: buflen = n
data = socket.recv(buflen)
if len(data) == 0: return None
n -= len(data)
buf.append(data)
return b''.join(buf)
Code: Alles auswählen
def read_message(socket):
in_file = socket.makefile('rb')
return in_file.read(int.from_bytes(in_file.read(4), byteorder='big'))
Code: Alles auswählen
fh = open("foto.jpg","rb")
myjpg = bytearray(fh.read())
fh.close()
Code: Alles auswählen
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect((self.ROUTERHOST, self.ROUTERPORT))
Vielleicht hatte ich das gestern vergessen. Habe es heute probiert mit:BlackJack hat geschrieben:@Alfons Mittelmeyer: Interessant ist weniger die Verbindung sondern ob Du beim `makefile()` auch sagst das Du Bytes haben möchtest.
Code: Alles auswählen
def read_message(socket):
in_file = socket.makefile('rb')
number = in_file.read(4)
return number + in_file.read(int.from_bytes(number, byteorder='big'))
Code: Alles auswählen
file_handle = open("music.mp3","rb")
client.send("OPEN","/storage/extSdCard/tcp/music.mp3")
Code: Alles auswählen
def read_block(message):
global file_handle
global block_nr
print("Block: ", block_nr)
block_nr += 1
block = file_handle.read(1000000)
if len(block) != 0: client.send("BLOCK",block)
else:
file_handle.close()
client.send("EOF")
client.do_receive("READ",read_block)