![]() |
Re: Pointer in C#
Hi,
Habs jetzt so probiert:
Code:
*) Ausnahme System.Runtime.Serialization.SerializationExceptio n wurde im ausgeführten Programm ausgelöst:
[Serializable]
public struct TPlayerState { public UInt16 id; public int x; public int y; public UInt32 color; } public static void RecClientData(object client) { Socket csock = client as Socket; BinaryFormatter binf = new BinaryFormatter(); byte[] buff = new byte[14]; // Größere Pakete kommen zurzeit eh nicht an, von daher hab ichs mal so fest drin. int len; while ((len = csock.Receive(buff,SocketFlags.None)) > 0) { Stream ms = new MemoryStream(); ms.Write(buff,0,buff.Length); ms.Position = 0; switch (buff[0]) { case 0: Console.WriteLine("..."); break; case 1: TPlayerState ps = (TPlayerState)binf.Deserialize(ms); // <---- *) Console.WriteLine(ps.y); break; default:break; } // .... Das Streamende wurde erreicht, bevor die Verarbeitung abgeschlossen wurde. Kann mir da jemand sagen was ich falsch mache? Versenden tu ich das ganze so:
Delphi-Quellcode:
Gruß
type
TPlayerState = packed record id: Word; // 1 x,y: Integer; color: TColor; end; var data: TPlayerState; begin data.id := 1; data.x := 20; data.y := 40; data.color := clred; Client.Send(@data,SizeOf(TPlayerState)); end; Neutral General |
Re: Pointer in C#
Du musst natürlich auch zum Serialisieren den BinaryFormatter verwenden.
|
Re: Pointer in C#
Zitat:
Ich versende doch die Daten von einem Delphi Win32 Programm aus. Da hab ich keinen Binary-Formatter.... |
Re: Pointer in C#
Dann musst du entweder den unmanaged Weg gehen oder den Stream manuell parsen. Letzteres ist doch wirklich kein Problem.
|
Re: Pointer in C#
Schau Dir
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz