Hi!
Wir machen hier in der Schule gerade ein Projekt und da gibt es ein kleines Netzwerk-Programmierproblem. Ich habe dieses Posting als "Minimal Off-Topic" gekennzeichnet weil es eigentlich um Sockets unter MS-Windows geht, aber das ist ja weitgehend identisch zu den Unix-Sockets.
Wir senden von einem GNU/Linux-Rechner Daten über die Drehposition eines Würfels per TCP an einen Windows-Rechner, der ein passendes Bild via OpenGL darstellt. Da der Rechner bei einer schnellen Bewegung des Würfels nicht hinterherkommt, haben wir uns überlegt, dass er jeweils nur die aktuellste Drehposition verarbeitet. Also haben wir ein großes Array verwendet und der Funktion recv() gesagt, dass sie eine entsprechend große Zahl an Bytes maximal lesen soll und wir verwenden nur die neuesten Daten. Wir haben nun beobachtet, dass - auch wenn nur ein paar Byte angekommen sind - die große Zahl der maximal zu lesenden Bytes die Funktion recv() extrem langsam macht und die Ausgabe ruckelt ohne Ende. Wir haben nun also einen Wert gesucht, der "optimal" ist im Bezug darauf, dass es nicht ruckelt, der Rechner aber auch hinterherkommt. Naja, das klappt jetzt in der Testumgebung so einigermaßen, aber da der GNU/Linux-Rechner die Daten an zwei Windows-Rechner sendet, müsste man das nochmals anpassen. Und für den produktiven Einsatz jeweils nochmal, sofern es dort überhaupt einen sinnvollen Wert gibt, was fraglich ist, weil dort dann ein realer Würfel gedreht werden wird, dessen Bewegung ja nicht gleichmäßig ist. D.h. wir müssten herausfinden, wie viele Daten am Socket lesbar sind. Frage also: Wie geht das?
Cheers,
GNU/Wolfgang
[Minimal Off-Topic] Zugriff auf verfügbare Bytes an einem Socket
Re: [Minimal Off-Topic] Zugriff auf verfügbare Bytes an einem Socket
Hi,
tja, TCP ist halt kein Echtzeit-Protokoll...
Es gibt da z.B. den Nagle-Algorithmus, der das Senden von Daten verzögert, wenn noch kein volles Paket vorhanden ist. Den kann man per setsockopt abschalten.
Gruß,
hjb
tja, TCP ist halt kein Echtzeit-Protokoll...
Es gibt da z.B. den Nagle-Algorithmus, der das Senden von Daten verzögert, wenn noch kein volles Paket vorhanden ist. Den kann man per setsockopt abschalten.
Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?
Re: [Minimal Off-Topic] Zugriff auf verfügbare Bytes an einem Socket
Hi !
zu meinen könntest vieleicht einen raw - socket aufmachen... damit kannst dann auch auf die ip - header zugreifen. dort ist ein vermerk über die größe des gesamten packets...
obs so sinvoll ist weis ich nicht...
oda ihr macht hald keinen recv sondern ein read ... das solle eigentlich auch funktionieren denn der sockethandle ist ja nix anderes als ein besonderes dateihandle ... dann hängst an den anfang 2 byte wo die puffergröße drinsteht. du read'est nur 2 byte und bekommst dadurch raus wieviel byte noch drinsind im stream und in der größe machst dir dann hald nen puffer...
vieleicht ist das ja ne anregung.
mfg,
taurus
zu meinen könntest vieleicht einen raw - socket aufmachen... damit kannst dann auch auf die ip - header zugreifen. dort ist ein vermerk über die größe des gesamten packets...
obs so sinvoll ist weis ich nicht...
oda ihr macht hald keinen recv sondern ein read ... das solle eigentlich auch funktionieren denn der sockethandle ist ja nix anderes als ein besonderes dateihandle ... dann hängst an den anfang 2 byte wo die puffergröße drinsteht. du read'est nur 2 byte und bekommst dadurch raus wieviel byte noch drinsind im stream und in der größe machst dir dann hald nen puffer...
vieleicht ist das ja ne anregung.
mfg,
taurus
Re: [Minimal Off-Topic] Zugriff auf verfügbare Bytes an einem Socket
oh man, man sollte halt kein TCP verwenden, wenn UDP angebracht waere.