Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Frage(n) zum socket Modul

4 views
Skip to first unread message

Alexander Langer

unread,
May 17, 2013, 2:35:56 PM5/17/13
to
Hallo allesamt,

ich habe da nochmal eine Frage zum Socket Modul.

Mit socket.sendall() (tcp/ip) sende ich in einer Schleife Datenblᅵcke,
insgesamt sind es ca. 1.5 GB.

Auf Empfᅵnger-Seite habe ich einen blockierenden conn.recv() Aufruf,
ebenfalls in einer Schleife.

Wie ist das mit den Puffern, mᅵsste nicht sendall() blockieren wenn der
Peer nicht hinterherkommt ?

Bei mir speichert der Empfᅵnger nur ein Bruchteil der Daten,
obwohl alles vom Sender verschickt wurde.

Oder anders gesagt: Mein Empfᅵnger-Socket "verschluckt" Daten.
Wie kann das sein ?

Danke und Gruᅵ,

Alexander

Gerald Klix

unread,
May 17, 2013, 2:45:02 PM5/17/13
to pyth...@python.org
Hi Alexander,

das ist sehr schwer zu beantworten ohne den Code zu sehen.
Wenn Du tatsächlich das implementiert hast, was Du beschreibst, sollte es funktionieren
aber der Teufel steckt bekanntlich im Detail.

Beste Grüße,

Gerald


Am 17.05.2013 um 20:35 schrieb Alexander Langer <alexande...@address.invalid>:

> Hallo allesamt,
>
> ich habe da nochmal eine Frage zum Socket Modul.
>
> Mit socket.sendall() (tcp/ip) sende ich in einer Schleife Datenblöcke,
> insgesamt sind es ca. 1.5 GB.
>
> Auf Empfänger-Seite habe ich einen blockierenden conn.recv() Aufruf, ebenfalls in einer Schleife.
>
> Wie ist das mit den Puffern, müsste nicht sendall() blockieren wenn der Peer nicht hinterherkommt ?
>
> Bei mir speichert der Empfänger nur ein Bruchteil der Daten,
> obwohl alles vom Sender verschickt wurde.
>
> Oder anders gesagt: Mein Empfänger-Socket "verschluckt" Daten.
> Wie kann das sein ?
>
> Danke und Gruß,
>
> Alexander
>
> _______________________________________________
> python-de maillist - pyth...@python.org
> http://mail.python.org/mailman/listinfo/python-de

Thomas Rachel

unread,
May 22, 2013, 3:35:22 AM5/22/13
to
Am 17.05.2013 20:35 schrieb Alexander Langer:
> Hallo allesamt,
>
> ich habe da nochmal eine Frage zum Socket Modul.
>
> Mit socket.sendall() (tcp/ip) sende ich in einer Schleife Datenblᅵcke,
> insgesamt sind es ca. 1.5 GB.

Sicher, daᅵ Du TCP verwendest? Dann sollte das Beschrieben *eigentlich*
nicht vorkommen.

Bei UDP hingegen (theoretisch) schon, da wird alles, was "zu viel" ist,
verworfen.


> Auf Empfᅵnger-Seite habe ich einen blockierenden conn.recv() Aufruf,
> ebenfalls in einer Schleife.
>
> Wie ist das mit den Puffern, mᅵsste nicht sendall() blockieren wenn der
> Peer nicht hinterherkommt ?
>
> Bei mir speichert der Empfᅵnger nur ein Bruchteil der Daten,
> obwohl alles vom Sender verschickt wurde.

Am besten zeigst Du uns mal den Code, dann kann man mehr sagen. (Und
bitte kein Leerzeichen vor Satzzeichen.)


Thomas

Alexander Langer

unread,
May 25, 2013, 9:28:07 AM5/25/13
to
Hi Gerald,

Am 17.05.2013 20:45, schrieb Gerald Klix:
> das ist sehr schwer zu beantworten ohne den Code zu sehen.
> Wenn Du tats�chlich das implementiert hast, was Du beschreibst, sollte es funktionieren
> aber der Teufel steckt bekanntlich im Detail.

Ich habe meinen Algorithmus nochmals �berarbeitet, der Fehler lag in der
Verarbeitung des Datenstroms. Meine derzeitige L�sung:

def read(sock, size):

buf = ''
while len(buf) < size:
data = sock.recv(size - len(buf))
if not data:
break
buf += data
return buf

Funktioniert auch soweit.

Wer nur f�r UNIX entwickelt kann auch den Flag Parameter "MSG_WAITALL"
zur�ckgreifen. Meiner Recherche nach funktioniert dieser aber nicht f�r
Windows.

Danke �brigens f�r die schnelle Antwort :)
0 new messages