Hallo Leute.
Erstmal muss ich sagen, dass ich weiß, dass das hier ein VB-Forum ist und es daher eigentlich nicht hierher passt.
Allerdings habe ich in diesem Forum schon einige Leute gesehen, die sich auch gut mit C# auskennen, daher will ich es zuerst hier versuchen, bevor ich mich wo anders anmelde.
Ich schreibe gerade eine simple Server-Client-Anwendung.
Dafür verwende ich den TcpClient aus dem System.Net.Sockets-Namespace.
Das Ganze sieht ungefähr so aus:
Server:
Client:
Das Problem ist, dass die 12 am anderen Ende ankommt, jedoch nicht die 3771, da PeekChar() sofort -1 liefert, obwohl doch eigentlich noch etwas im Stream ist, das ausgelesen werden kann.
Ich habe es alternativ auch schon mit client.Read() am Server probiert, alles Byte für Byte auszulesen, was auch alles schön ausliest, jedoch blockiert die Funktion den Thread, sobald nichts mehr im Stream ist.
Gibt es eine Möglichkeit, zu überprüfen, ob man am Ende eines Streams angelangt ist? Oder besser noch, was mache ich falsch, so dass PeekChar() nicht funktioniert?
reader.BaseStream.Length habe ich schon versucht, jedoch wirft mir das eine NotSupportedException, woraus ich schließe, dass das bei Netzwerk-Streams nicht funktioniert (?).
Würde mich echt freuen, wenn mir jemand helfen könnte. :)
Erstmal muss ich sagen, dass ich weiß, dass das hier ein VB-Forum ist und es daher eigentlich nicht hierher passt.
Allerdings habe ich in diesem Forum schon einige Leute gesehen, die sich auch gut mit C# auskennen, daher will ich es zuerst hier versuchen, bevor ich mich wo anders anmelde.
Ich schreibe gerade eine simple Server-Client-Anwendung.
Dafür verwende ich den TcpClient aus dem System.Net.Sockets-Namespace.
Das Ganze sieht ungefähr so aus:
Server:
C-Quellcode
- // ...
- TcpClient client = listener.AcceptTcpClient();
- BinaryReader reader = new BinaryReader(client.GetStream(), Encoding.ASCII);
- while (Running)
- {
- byte packetId = reader.ReadByte();
- List<byte> bytes = new List<byte>();
- while (reader.PeekChar() != -1)
- {
- bytes.Add(reader.ReadByte());
- }
- if (PacketArrived != null) // Event
- PacketArrived(this, new PacketArrivedEventArgs(bytes.ToArray()));
- }
Client:
Das Problem ist, dass die 12 am anderen Ende ankommt, jedoch nicht die 3771, da PeekChar() sofort -1 liefert, obwohl doch eigentlich noch etwas im Stream ist, das ausgelesen werden kann.
Ich habe es alternativ auch schon mit client.Read() am Server probiert, alles Byte für Byte auszulesen, was auch alles schön ausliest, jedoch blockiert die Funktion den Thread, sobald nichts mehr im Stream ist.
Gibt es eine Möglichkeit, zu überprüfen, ob man am Ende eines Streams angelangt ist? Oder besser noch, was mache ich falsch, so dass PeekChar() nicht funktioniert?
reader.BaseStream.Length habe ich schon versucht, jedoch wirft mir das eine NotSupportedException, woraus ich schließe, dass das bei Netzwerk-Streams nicht funktioniert (?).
Würde mich echt freuen, wenn mir jemand helfen könnte. :)
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „haiyyu“ ()