Leerlaufzeiten beim Empfang von Daten über UDP Socket

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
hiwwelchen
User
Beiträge: 4
Registriert: Freitag 26. Mai 2006, 12:33

Hallo zusammen.
Ich empfange über einen UDP Server von einem in C geschriebenen UDP Client. Beim Empfang hab ich jedoch immer Leerlaufzeiten in welchen nichts passiert. Dann empfängt er wieder einen Block von Daten. Auch wenn ich einen Python UDP Client zum Senden der Daten hernehm bleibt das Problem bestehen. Anbei der Code des UDP Servers:

Code: Alles auswählen

import socket
import sys

#Initialisierung der benötigten Variablen
host = ""                       #Adresse des Servers
port = 8856                     #Portan welchem Daten empfangen werden
buf = 4096                      #Maximale Groesse der Daten
data = ""                       #Zum Speichern der zu empfangenden Daten

def main():
    #Initialisierung und binden des Sockets     
    addr = (host, port)             #Adresse an welche Daten geschickt werden
    UDPSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    UDPSock.bind(addr)
    print 'UDP Server gestartet. Empfangsbereit'
    i = j = 0
    #Daten empfangen
    while (1):
        data = ""
        print 'Warte auf Daten'
        data, addr = UDPSock.recvfrom(buf)
        if data == "":
                print 'Keine Daten empfangen'
        else:
            Datatype = type(data)
            print data
        #Nach 10000 empfangenen Datenpaketen Abbruch.   
        if j > 10000:
            break  
        print "Durchlaufnummer:", j
        j += 1
    #Socket schließen
    UDPSock.Close()
    
if __name__ == '__main__':
    main()
Kann mir einer weiterhelfen?
SeB
User
Beiträge: 25
Registriert: Mittwoch 24. August 2005, 14:29
Wohnort: Buchenau/Hessen
Kontaktdaten:

Hi,
hast du mal probiert mit einem Netzwerksniffer die Kommunikation zwischen Server und Client zu untersuchen?
Was das Programm evtl. ausbremsen könnte ist das Ausgeben der bis zu 4096 Zeichen auf der Konsole. Desweiteren ist das Anwenden der type()-Funktion auf data sinnlos, da dort sowieso immer 'type string' rauskommen muss.
Ansonsten hab ich schon viel mit Sockets und Python angestellt und bei mir haben die bis jetzt immer zuverlässig gearbeitet.
[url=http://therealzordak.de/index.php]therealzordak.de[/url] - [url=http://therealzordak.de/index.php?section=movies]Movies[/url] - [url=http://therealzordak.de/index.php?section=derwahn]Fun[/url]
hiwwelchen
User
Beiträge: 4
Registriert: Freitag 26. Mai 2006, 12:33

Hab jetzt das Ganze so umgeschrieben, dass der Cleint nachdem er ein Datenpaket verschickt hat auf eine Antowrt des Servers wartet, bevor er das nächste Paket verschickt. Jetzt läuft es dann eigentlich auch ganz gut und ohne Pausen.
Das type() war noch ein Überbleibsel aus den ersten Tests mit den Sockets. Wird höchste Zeit dass es verschwindet. Vor allem da ich mir den Typ ja gar nicht mehr ausgeben lass. :)
Danke für die anderen Tipps. Werde das gleich mal ausprobieren.


Muss dann gleich nochmal danke sagen, da das runtersetzen der Buffer size die Lösung meines Problems ist. :D
Antworten