Hiho,
ich mach mir warscheinlich gerade wieder zu viele Gedanken, aber von selbst komm ich zu keiner Lösung.
Ich beschäftige mich schon länger mit Sockets bzw mit Streams.
Also habe ich einen DatenpaketLogger geschrieben (Sowas wie der NuConnector nur eben ohne Ent/Verschlüsselung).
Ich stelle mir nun gerade die Frage: Darf ich Datenpakete "zerreißen"? Wenn ich nun Daten empfange, woher weis ich, dass das Datenpacket zuende ist? Im Stream liegen die ja ohne Trennung hintereinander.
Ich kann mir nicht vorstellen, das ich ein 4096 Byte großes Array mache und damit dann immer die Daten auslese und weitergebe. Immer in 4096 Byte großen Blöcken. Da werden dann doch Informationen getrennt, die eigentlich zusammengehören.
Vielleicht denk ich auch nur wieder falsch. Aber der Gedanke stört mich beim schlafen
Wenn jemand ne Idee hat, immer her damit
> Wer sich das mal anschauen will, hier mal ein Test-Programm, das das Ganze darstellt.
(Einfach einen Text mit weniger oder mehr als 8 Zeichen eingeben und Return drücken)
[cs]static class Program
{
static NetworkStream fromstream;
static NetworkStream tostream;
static ASCIIEncoding enc = new ASCIIEncoding();
public static void Main(string[] args)
{
// Create & Start listener
TcpListener listener = new TcpListener(1337);
listener.Start();
// Create TcpClient & Connect to Listener
TcpClient from = new TcpClient();
from.Connect(IPAddress.Parse("127.0.0.1"), 1337);
// Accept connection
TcpClient to = listener.AcceptTcpClient();
// Get Streams
tostream = to.GetStream();
fromstream = from.GetStream();
// Read Text to Send from Console
string line = Console.ReadLine();
// Send Text first time
Console.WriteLine("S > " + line.ToLower());
tostream.Write(enc.GetBytes(line.ToLower()), 0, line.Length);
tostream.Flush();
// Send Text second time
Console.WriteLine("S > " + line.ToUpper());
tostream.Write(enc.GetBytes(line.ToUpper()), 0, line.Length);
tostream.Flush();
// Receive Data
while (true)
{
// Extra small ReceiveBuffer
byte[] bt = new Byte[8];
// Receive Data
int bytesreceived = fromstream.Read(bt, 0, 8);
// Write Data to Console
Console.WriteLine("R > Size: " + bytesreceived.ToString() + " Data: " + enc.GetString(bt));
}
}
}
[/cs]
Gruß
florian0