Ich habe einen seltenen Fehler, der beim Lesen einer Steckdose aufzutreten scheint.
Es scheint, dass ich beim Lesen von Daten manchmal nur 1-3 Bytes eines Datenpakets erhalte, das größer als dieses ist.
Wie ich aus der Pipe-Programmierung gelernt habe, erhalte ich dort immer mindestens 512 Bytes, solange der Absender genügend Daten bereitstellt.
Außerdem überträgt mein Sender jedes Mal, wenn er etwas sendet, mindestens >= 4 Bytes - ich dachte also, dass am Anfang (!!) der Übertragung mindestens 4 Bytes auf einmal empfangen werden.
In 99,9% aller Fälle scheint meine Annahme zuzutreffen ... aber es gibt wirklich seltene Fälle, in denen weniger als 4 Bytes empfangen werden. Es erscheint mir lächerlich, warum das Netzwerksystem dies tun sollte?
Weiß jemand mehr?
Hier ist der von mir verwendete Lesecode:
mySock, addr = masterSock.accept()
mySock.settimeout(10.0)
result = mySock.recv(BUFSIZE)
# 4 bytes are needed here ...
...
# read remainder of datagram
...
Der Absender sendet das komplette Datagramm mit einem Aufruf von send.
Edit: das Ganze funktioniert auf localhost - es sind also keine komplizierten Netzwerkanwendungen (Router etc.) beteiligt. BUFSIZE ist mindestens 512 und der Absender sendet mindestens 4 Bytes.
0 Stimmen
Darf ich fragen, wie viele Bytes Sie senden und auf welchen Wert BUFIZE eingestellt ist? In den anderen Antworten wird erklärt, dass dies ein völlig normales Verhalten ist und Sie immer in einer Schleife lesen/schreiben sollten, bis Sie genug gelesen haben, aber vielleicht können Sie herausfinden, warum das in diesem Fall auftritt
1 Stimmen
Überprüfen Sie tatsächlich den Rückgabewert von send, um zu überprüfen, wie viele Bytes gesendet werden?
0 Stimmen
Hallo Robert, dieser Vorschlag ist gut. Jetzt weiß ich es. Könnte aber auch Probleme machen ...
0 Stimmen
Haben Sie jemals herausgefunden, was das Problem mit Ihrem Programm war?