UDP-Problem
Verfasst: Montag 9. Juni 2008, 07:40
Hallo!
Ich hab ein kleines Problem. Ich will in regelmäßigen Abständen eine "größere" Datenmenge (d.h. ca. 200kb) über das UDP-Protokoll versenden. Dazu muss ich die Daten in einzelne Pakete aufteilen. Wenn ich nun in direkter Abfolge mehrere Pakete verschicke empfange ich nicht alle. Solange ich über den localhost schicke, sollten ja auch keine Pakete unterwegs verloren gehen. Ich nehme an das es einen Empfangspuffer gibt, der dann vollgeschrieben wird und mit recv nur die Daten entnommen werden können, die in dem Puffer im Moment enthalten sind. Ich weiß jedoch nicht wie groß dieser Puffer ist, geschweige denn wie man ihn verändern kann, noch bin ich mir sicher ,dass es daran liegt.
Ich habe ein Beispielprogramm geschrieben um das Problem zu verdeutlichen:
Hier ist das Client-Programm:
und hier das Server-Programm:
Wenn ich den Server starte, dann den Client und dann die Pakete abrufe, empfängt der Server bei mir nur 8 der 20 gesendeten Pakete.
Danke im Voraus!
Ich hab ein kleines Problem. Ich will in regelmäßigen Abständen eine "größere" Datenmenge (d.h. ca. 200kb) über das UDP-Protokoll versenden. Dazu muss ich die Daten in einzelne Pakete aufteilen. Wenn ich nun in direkter Abfolge mehrere Pakete verschicke empfange ich nicht alle. Solange ich über den localhost schicke, sollten ja auch keine Pakete unterwegs verloren gehen. Ich nehme an das es einen Empfangspuffer gibt, der dann vollgeschrieben wird und mit recv nur die Daten entnommen werden können, die in dem Puffer im Moment enthalten sind. Ich weiß jedoch nicht wie groß dieser Puffer ist, geschweige denn wie man ihn verändern kann, noch bin ich mir sicher ,dass es daran liegt.
Ich habe ein Beispielprogramm geschrieben um das Problem zu verdeutlichen:
Hier ist das Client-Programm:
Code: Alles auswählen
import socket
SERVER_ADDRESS = '127.0.0.1'
SERVER_PORT = 50007
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
try:
while True:
for i in range(20):
client.sendto('x'*1024,(SERVER_ADDRESS, SERVER_PORT))
print 'sending #',i
raw_input('...')
finally:
client.close()
Code: Alles auswählen
import socket
PORT = 50007
BUFLEN = 1024
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
server.bind(('127.0.0.1', PORT))
i=0
try:
raw_input('Pakete abrufen...')
while True:
message = server.recv(BUFLEN)
print 'Received packet',len(message),i
i+=1
finally:
server.close()
Danke im Voraus!