假如有一个结构,数据类型有好几种。怎么传?服务器端和客户端应该做些什么?如果传送地是一个文件,又该怎么传?
解决方案 »
- VC2005这个error C2440: '=' : cannot convert from 'unsigned short [256]' to 'LPWSTR
- ReleaseDC与DeleteObject的区别
- MFC editbox 设置长度
- 初学windows编程,请帮我理解一下MessageBox的第4个参数的使用(《windows 程序设计》1.3.5节)
- 求启发式算法(Heuristic Algorithm)VC++源代码
- 怎么得到记事本的编辑区域的句柄??
- 怎样获得一个矩形区域内的位图?
- 请问拆分窗口怎么在窗口的标题栏加入汉字,能加入吗?在线等,马上给分!
- 我的exe文件怎样打包成setup.exe啊!?
- 门诊咋这样?散分
- 怎样用VC删除EXCEL表中的一行?
- 请论坛管理员帮助
{
int b;
CString c;
}; //定义变量,然后赋值
a... = ...;
c=...然后发送数据的时候,直接用&a,长度就sizeof(a);问题是接受的时候,怎么还原b和c?
还原的时候
(youStruct *)pBuffer->a 就是里面的a成员变量了
发送端:send(servsocket,(char*)&a,sizeof(a),0)
接收端:recv(cliensocket,(char*)&a,sizeof(a),0)
然后,a.b=.....
a.c=.....
可以试想一下,你要传送10个有可能相同也有可能不同的struct类型怎么传?
传送的报文中必须有传送类型和长度的信息,才能做到。
否则长度都不定,你让socket send多长为好?
send发送是拷贝一段地址而已
但是你可以使用缓存buf,
按结构大小填写数据,再发送buf.
发送给服务器,服务器端接收到字符串后,再用strtok函数解析出来。strtok解析出来的是char类型,
再传唤成相应的类型,知识点是char类型转化成*型,网上有相应事例。如果是tcp/ip协议,就直接用package.cpp/.h,可以直接写入相应类型的数据。如:
CLPackage package;
package.SetDword(0);
package.SetByte(6);
类中提供各种函数可以往包中写入不同类型的数据。
客户端和服务器都定义相同的struct,在一端接收到以后,直接用s.xxx获取
传地址
typedef struct _pvmsg
{
int c;
int b;
byte d;
BOOL id;
long l;
char str[100];
struct tmp;
} PVM,*PPVM;使用时 PPVM pMsg= (PPVM)buf;
直接使用pMsg 就了
可以直接操作有个问题就是字节对齐问题需要自己注意,
最好都用int的
不然使用#pragram
总是,socket传什么,都把他当做一个内存块,里面什么类型,什么内容,都不用管,传过去之后,另外一边再解析就ok了。
另外:字节对齐指的什么?