读书人

服务端向客户端发送一个结构体?解决方

发布时间: 2012-04-04 16:38:51 作者: rapoo

服务端向客户端发送一个结构体?
大家好,今天我想请教一个问题!

服务端将一个结构体赋值完毕,它想向客户端发送这个结构体的对象,不过发送的消息是字符串的形式,

请问怎么去解析这个字符串呢?是不是发送这个结构体的地址过去就行了呢?

还望大家不吝赐教! 谢谢!

[解决办法]
跟客户端订好具体协议,根据相应的协议解析。
[解决办法]
当然不能发这个结构体的地址
memcpy到字符串,然后发送
[解决办法]
客户端和服务端要有一个协议,可以正确解析出接收到的字符串,最简单的方法就是把服务端的那个结构体copy到客户端的代码里
[解决办法]
我们在做数据通信的时候,传输数据是这样的。
定义一个结构。
在服务器和客户端使用相同的定义和内存模式。
然后,直接把这个结构的内存以字节流的形式传输过去。
接受后,有字节流重新映射为结构。

C/C++ code
#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);}
[解决办法]
不能发地址,地址只能在当进的进程中访问
要把结构体的二进制数据作为一个数据包发送出去,还要注意下所谓的大端小端问题,就是两个通信的程序的体系结构要有相同的字节顺序。
[解决办法]
你把门牌号发过去,人家都不一定能找到你的大楼……多悲催
[解决办法]
制定好通讯协议, 以字节为基本单位.
[解决办法]
探讨
制定好通讯协议, 以字节为基本单位.

[解决办法]
链表是指针,不是平台内存模型的。
最好定义为简单结构的。
也就是 C 语言的那种结构。POD。
[解决办法]
接受到的字符强制转换成你定义好的一个结构体

[解决办法]
有很多中不同的做法,首先要考虑的一个问题是,服务器端和客户端都用什么语言开发,如果都是C++的话,可以使用4楼的程序。如果不是的话,有两个做法,1.双方商定一个通讯协议(就是数据包的结构,比如,前2个字节是包类型,后面的两个字节是包版本,再后面四个字节是包体长度等)。2.采用现有的一些技术,当然也需要你去商定传输的内容等信息,比如xml,json,google有个开源的项目名字记不清楚了(号称要比JSON要快)等第三方的技术。
[解决办法]
结构体不要含有指针成员

读书人网 >C++

热点推荐