服务端向客户端发送一个结构体?
大家好,今天我想请教一个问题!
服务端将一个结构体赋值完毕,它想向客户端发送这个结构体的对象,不过发送的消息是字符串的形式,
请问怎么去解析这个字符串呢?是不是发送这个结构体的地址过去就行了呢?
还望大家不吝赐教! 谢谢!
[解决办法]
跟客户端订好具体协议,根据相应的协议解析。
[解决办法]
当然不能发这个结构体的地址
memcpy到字符串,然后发送
[解决办法]
客户端和服务端要有一个协议,可以正确解析出接收到的字符串,最简单的方法就是把服务端的那个结构体copy到客户端的代码里
[解决办法]
我们在做数据通信的时候,传输数据是这样的。
定义一个结构。
在服务器和客户端使用相同的定义和内存模式。
然后,直接把这个结构的内存以字节流的形式传输过去。
接受后,有字节流重新映射为结构。
#pragma pack(push)#pragma pack(1)typedef struct tagDataType{ DWORD d1; FLOAT d2;} DataType;#pragma pack(pop)void Send(LPCVOID pData, size_t nLength);void Recv(LPVOID pData, size_t nBuffer, LPDWORD pdwRecved);// 服务器。void SendFromServer(){ DataType dt; dt.d1 = 0; dt.d2 = 1.0f; Send(&dt, sizeof (dt));}// 客户端。void RecvFromServer(){ DataType dt; ZeroMemory(&dt, sizeof (dt)); DWORD dwRecved = 0; Recv(&dt, sizeof (dt), &dwRecved);}
[解决办法]
不能发地址,地址只能在当进的进程中访问
要把结构体的二进制数据作为一个数据包发送出去,还要注意下所谓的大端小端问题,就是两个通信的程序的体系结构要有相同的字节顺序。
[解决办法]
你把门牌号发过去,人家都不一定能找到你的大楼……多悲催
[解决办法]
制定好通讯协议, 以字节为基本单位.
[解决办法]