I have a C++ struct below:
struct CUSTOM_DATA {
int id;
u_short port;
unsigned long ip;
} custom_data;
How can i convert it to C# struct, serialize it and send via tcp socket?
Thanks!
upd
So C# code will be?
[StructLayout(LayoutKind.Sequential)]
public struct CustomData
{
public int id;
public ushort port;
public uint ip;
}
public void Send()
{
CustomData d = new CustomData();
d.id = 12;
d.port = 1000;
d.ip = BitConverter.ToUInt32(IPAddress.Any.GetAddressBytes(), 0);
IntPtr pointer = Marshal.AllocHGlobal(Marshal.SizeOf(d));
Marshal.StructureToPtr(d, pointer, false);
byte[] data_to_send = new byte[Marshal.SizeOf(d)];
Marshal.Copy(pointer, data_to_send, 0, data_to_send.Length);
client.GetStream().Write(data_to_send, 0, data_to_send.Length);
}
The C# version of this struct would be:
[StructLayout(LayoutKind.Sequential)]
public struct CustomData
{
public int id;
public ushort port;
public uint ip;
}
As for sending this via a socket, you can just send the binary data directly. The Marshal class has methods for getting a pointer (IntPtr) from the structure and copying into a byte array.
[StructLayout(LayoutKind.Sequential)]
struct CUSTOM_DATA {
int id;
ushort port;
uint ip;
};
CUSTOM_DATA cData ; // use me
edit: thx reed
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With