我有一个C++结构如下:
struct CUSTOM_DATA {
int id;
u_short port;
unsigned long ip;
} custom_data;
Run Code Online (Sandbox Code Playgroud)
如何将其转换为C#struct,序列化并通过tcp socket发送?
谢谢!
UPD
那么C#代码会是什么?
[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);
}
Run Code Online (Sandbox Code Playgroud) 如何向服务器发送4个字节int
,在服务器端将此缓冲区转换为int.
客户端:
void send_my_id()
{
int my_id = 1233;
char data_to_send[4];
// how to convert my_id to data_send?
send(sock, (const char*)data_to_send, 4, 0);
}
Run Code Online (Sandbox Code Playgroud)
服务器端:
void receive_id()
{
int client_id;
char buffer[4];
recv(client_sock, buffer, 4, 0);
// how to conver buffer to client_id? it must be 1233;
}
Run Code Online (Sandbox Code Playgroud) 我有一个问题,我使用select
函数等待我可以在服务器端读取收到的数据,但它的工作错误,就像我什么也没收到,超时通过.
服务器端代码:
int fd = accept(sockfd, addr, addrlen);
if(fd > 0)
{
struct timeval tv;
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
tv.tv_sec = 5;
tv.tv_usec = 0;
// wait when i can read data
int ret_select = select(1, &rfds, (fd_set *) 0, (fd_set *) 0, &tv);
if(ret_select > 0)
{
// data ready to be readed. NEVER HERE!
}
else
{
// nothing. ALWAYS HERE
}
}
Run Code Online (Sandbox Code Playgroud)
客户端:
int ret = connect(s, name, namelen);
if(ret == 0)
{
struct …
Run Code Online (Sandbox Code Playgroud) 我有一个麻烦,我的服务器应用程序发送8字节长度的数据包 - AABBCC1122334455
但我的应用程序分两部分收到此数据包,AABBCC1122
并334455
通过"recv"函数,我该如何解决?
谢谢!