@tomba: Die erste Zeile im ersten Programm ist ein bisschen sinnlos.
Wenn Du sichergehen willst das auch wirklich jedes mal 1024 Bytes gesendet werden, dann musst Du `sendall()` verwenden. `send()` muss nicht alles senden. Die Methode hat die Anzahl der tatsächlich gesendeten Bytes als Rückgabewert.
Ähnlich beim empfangen: ``recv(1024)`` gibt mindestens ein Byte und maximal 1024 Bytes zurück. Wenn Du sicher 1024 Bytes lesen willst, dann musst Du so lange lesen bis Du tatsächlich 1024 Bytes beisammen hast. Oder Du zählst keine ”Pakete” sondern Bytes.
Was soll denn Deiner Meinung nach die innere ``while``-Schleife beim Empfänger bewirken?
BlackJack hat geschrieben:@tomba: Die erste Zeile im ersten Programm ist ein bisschen sinnlos.
Wenn Du sichergehen willst das auch wirklich jedes mal 1024 Bytes gesendet werden, dann musst Du `sendall()` verwenden. `send()` muss nicht alles senden. Die Methode hat die Anzahl der tatsächlich gesendeten Bytes als Rückgabewert.
Ähnlich beim empfangen: ``recv(1024)`` gibt mindestens ein Byte und maximal 1024 Bytes zurück. Wenn Du sicher 1024 Bytes lesen willst, dann musst Du so lange lesen bis Du tatsächlich 1024 Bytes beisammen hast. Oder Du zählst keine ”Pakete” sondern Bytes.
Was soll denn Deiner Meinung nach die innere ``while``-Schleife beim Empfänger bewirken?
Ah, okay. Vielen Dank. Ich wusste nicht, dass 'send()' nicht alles senden muss.
Entschuldigung. Habe den Code falsch eingerückt! Die Schleife soll außen sein und die übrigen Pakete "abfangen", falls sie nicht empfangen werden.
interval = 1 # second
timeout = 1 # second
current_time = time.time()
first_time=current_time
end_time = current_time + interval
bc = 0
sock.settimeout(timeout)
while end_time >current_time:
try:sock.recv(1024)
bc += 1
current_time=time.time()
while True:
try:sock.recv(1024)
except socket.timeout:
break
print (current_time-first_time)/bc
[/quote]
Wenn in der ersten Schleife ein Timout auftritt sollte das nicht still ignoriert werden und eine ziemlich sinnlose Messung ausgegeben werden sondern entweder einfach nur die Exception ausfgelöst werden oder irgend eine andere sinnvolle Fehlerbehandlung durchgeführt werden.
interval = 1 # second
timeout = 1 # second
current_time = time.time()
first_time=current_time
end_time = current_time + interval
bc = 0
sock.settimeout(timeout)
while end_time >current_time:
try:sock.recv(1024)
bc += 1
current_time=time.time()
while True:
try:sock.recv(1024)
except socket.timeout:
break
print (current_time-first_time)/bc
Wenn in der ersten Schleife ein Timout auftritt sollte das nicht still ignoriert werden und eine ziemlich sinnlose Messung ausgegeben werden sondern entweder einfach nur die Exception ausfgelöst werden oder irgend eine andere sinnvolle Fehlerbehandlung durchgeführt werden.
Ja, der Code war nicht getestet. War nur so ein Konzept. Natürlich muss in die Schleife noch: current_time = time.time()
Und ja, das stimmt. Aber es war wie gesagt eher die Frage, ob dieses Konzept laufen würde.
Science makes you fly to the moon, religion makes you fly into buildings.