Networkstream sendet nicht

JJB

Cogito ergo brumm
TachTach !

Vielleicht ist der Titel ein wenig unpassend. Tatsächlich sendet der Networkstream, aber erst dann wenn ich den Stream schließe. Die Flush Funktion hat keine Wirkung.

Ich habe einen Server der Anfragen von Clients beantwortet. Dazu sind aber mehrere Pakete zu schicken. Wenn ich nun zwischen den Paketen immer den Port schließen und neu aufbauen muß damit ein Paket ankommt, kann ich nicht mehr sicher sein, dass das zweite Paket noch an den selben Client geht.

Ich muss dem Networkstream doch irgendwie sagen können, "Gib deine Daten jetzt frei" ohne dass ich gleich die Verbindung trenne

Jemand ne Idee ?.
 
Stückchenweise auslesen ist möglich ohne den Stream zu schließen.
Wichtig ist eine feste Angabe an zu lesenden Bytes. Diese kann auch größer sein, als die Anzahl tatsächlich gesendeter Bytes

Sender:
itsNetworkStream.Write(aByteArray, 0, aByteArray.Length);

Empfänger:
FileStream aFileStream = new FileStream("Data.dat", FileMode.Create);
byte[] aByteArray = new byte[256];
do
{
int aReadBytes = itsNetworkStream.Read(aByteArray, 0, aByteArray.Length);
aFileStream.Write(aByteArray, 0, aReadBytes);
aByteArray = new byte[256];
}
while(itsNetworkStream.DataAvailable);
aFileStream.Flush();
aFileStream.Close();
 
Ich habe mit NetworkStream keine Erfahrung. Habe jedoch mit den Protokollen UDP und TCP gearbeitet. In Deinem Falle könntest du dies warscheinlich auch über TCP machen, benutze dafür das Objekt TcpClient. UDP ist verbindungslos und warscheinlich für dein Projekt weniger geeignet.

Ich hoffe Dir mit meinen Ratschlägen ein bisschen geholfen zu haben.
 
Hallo!

weshalb erzeugst du denn in der Schleife eines neues byte[] ? Das ist unnötig, du kannst das zuvor definierte byte[] wiederverwenden. Die Inhalte werden durch den Read-Vorgang überschrieben und solange du nur aReadBytes bytes aus dem byte[] herausliest liest du auch nur die Daten die wirklich beim letzten Read - Vorgang in das byte[] eingelesen wurden.

Gruß Tom
 
@aquasonic:
Der Networkstream basiert auf einer TCPClient-TCPListener Verbindung.

@Thomas Darimont:
Klar, is überflüssig. War noch aus Tests übrig.


Übrigens... der Eintrag ist bereits als erledigt gelistet. Siehe Lösung oben.
 
Zurück