游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2440|回复: 4

有关客户端向服务器发送结构体变量的问题

[复制链接]

10

主题

40

帖子

42

积分

注册会员

Rank: 2

积分
42
发表于 2005-7-8 16:21:00 | 显示全部楼层 |阅读模式
在客户端用 send( clientsocket, (char *)&loginmsg, sizeof( loginmsg ), 0 ) ; 向服务器发送结构体变量数据。 在服务器端我用完成端口接收。PerIoData->DataBuf .buf 是接收到的数据, 但是我应该如何从PerIoData->DataBuf .buf 中分离出结构体编两种的数据呢?希望能给一些代码例子, 谢谢

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-7-8 17:01:00 | 显示全部楼层

Re:有关客户端向服务器发送结构体变量的问题

http://bbs.gameres.com/showthread.asp?threadid=32088

其中有网络模块,可以参考

7

主题

136

帖子

136

积分

注册会员

Rank: 2

积分
136
发表于 2005-7-9 07:24:00 | 显示全部楼层

Re:有关客户端向服务器发送结构体变量的问题

首先你得解决粘包问题.
然后,直接强制转换就可以了.
建议不要使用sizeof(结构体),会有很多问题的.

10

主题

40

帖子

42

积分

注册会员

Rank: 2

积分
42
 楼主| 发表于 2005-7-9 08:51:00 | 显示全部楼层

Re:有关客户端向服务器发送结构体变量的问题

我不太明白什么是沾包,给我详细解释一下,好么, 还有如果不用sizeof(机构体),我应该用什么呢?谢谢

7

主题

136

帖子

136

积分

注册会员

Rank: 2

积分
136
发表于 2005-7-10 08:59:00 | 显示全部楼层

Re:有关客户端向服务器发送结构体变量的问题

粘包简单的说,就是CLIENT向服务器发包或者服务器向CLIENT发包时候.因为网络延迟的关系
上一个包还在缓冲区的时候,下一个包就进来了,一起存在于缓冲区内.这个时候,消息处理程序会将他们当成一个包一起处理.这就是粘包.所以,必须避免这个问题.比如在包的头部写上包的大小.读包的时候,根据这个大小来切分他们.
关于 sizeof以为我们的VC有字节对齐的要求.sizeof返回的结构体都是8字节对齐的.这样就可能出现错误了.所以,你可以写个类来封装消息.类里面加个成员size()来返回正确的字节数长度.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-26 08:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表