问一下,socket通信怎么发送struct类型的数据,以及怎么接受啊?
是不是要序列化啊? 问题点数:100、回复次数:11Top
1 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2006-03-01 18:28:51 得分 0
可以转换成char*,然后传输,再转换回来Top
2 楼charles_y(每天上网一小时)回复于 2006-03-01 18:43:42 得分 0
一般都是先转化成char*,收到后转化回来
序列化是个好的想法,但是太难了Top
3 楼cnwolf(独狼)回复于 2006-03-01 19:15:50 得分 10
struct在内存中也是连续存放的,把它当字节流发送
接收后强制转换成struct就行Top
4 楼Atomictry(天影)回复于 2006-03-01 20:32:14 得分 40
大概是这个样子:
// 发送
void SendMsg(CClient *pClientSocket, YourStruct &outMsg)
{
pClientSocket->Send(&outMsg, sizeof(outMsg))
}
// 接收
void ReveMsg(CClient *pClientSocket, YourStruct &inMsg)
{
int ByteCount=pClientSocket->Receive((void *)(&inMsg),sizeof(struct inMsg));
}
// 序列化也可以, 网上的myicq源码用了序列化,你可以下载看看。Top
5 楼nuaawenlin(飘人)回复于 2006-03-01 20:51:33 得分 0
使用char *强制转换就可以了Top
6 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2006-03-01 22:20:06 得分 0
统一按照字节流处理。Top
7 楼HiRong()回复于 2006-03-02 01:25:10 得分 10
数据在网络中传输不分什么类型,就是一堆的01,所以就当一块char发送出去就行了Top
8 楼alen_ghl(东方求*)回复于 2006-03-02 11:13:40 得分 40
struct packdata{
...
...
}PackData;
发送端
PackData pd;
... // 给pd赋值
send(s, (char *)&pd, sizeof(PackData), 0);
接收端
PackData pd;
memset(&pd, 0, sizeof(PackData));
recv(s, (char *)&pd, sizeof(PackData), 0);
pd直接就可以用了
Top
9 楼dragonmu(dragonmu)回复于 2006-03-02 11:29:26 得分 0
建议先转成char*再发,如果是跨平台可能会存在结构对齐的问题Top
10 楼dan_xp(天翔)回复于 2006-03-02 17:58:30 得分 0
非常感谢!接分Top
11 楼vc_flying(好想学好vc)回复于 2006-03-03 16:04:46 得分 0
有道理Top




