快要急疯了,各位大侠快来帮帮忙,大放分!

jjiaming 2005-08-04 02:42:04
小弟现在在做一个小项目,现在在做网络部分,有几个问题不知道怎么解决:
1、一个数据发送的最大字节数是多少。
2、局域网 内有20台左右的机器(客户端),一次传送的数据最大量有30多K,服务器端每秒向所有客户端发送几个字节的数据,而客户端会不定时地向服务器端查询数据库。像这种情况,是用CAyncSocket还是CSocket?要不要用多线程?是用阻塞模式还是非阻塞模式。我现在的做法是,当服务端Accept时,就新建一个CAyncSocket对象,并放入一个队列中,服务器要发送数据时就直接从队列中取出相应的CAyncSocket对象指针,然后Send,不知道可不可行
3、我上网查了一下,说是有时多个数据包是放在一起发送的,也就是说服务器(或是客户端)多次发送的数据很可能只触发一次OnReceive,而且收到的可能不是完整的包数。
项目只有几天就要交付使用了,急得快要发疯了,分绝对不是问题,小弟还有一千多分。大家帮帮忙,不要让这个帖子沉下去。拜托了。解决了立即给分
...全文
149 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
younggle 2005-08-05
  • 打赏
  • 举报
回复
参考一下这个,源代码可以直接使用了。
http://www.vczx.com/article/show.php?id=1041
hyamw 2005-08-05
  • 打赏
  • 举报
回复
你使用多线程同步就没问题了,不过效率会降低一些(尤其是多个用户同时跟服务器通讯的时候)。
jjiaming 2005-08-04
  • 打赏
  • 举报
回复
to hyamw(林锋) :
我觉得你的办法可以改进一下。可以改为建立两个缓冲区a 和b,缓冲区a存放非完整的数据包,缓冲区a存放完整的数据包,首先将收到的数据放入缓冲区b 内,然后拼合缓冲区ab 并读取其完整的数据包,再将b内不完整的数据包放入a内。说起来似乎更麻烦,但我觉得这样做好像容易实现点
jjiaming 2005-08-04
  • 打赏
  • 举报
回复
哦,这样就好了,我一直担心这种事发生呢
dirdirdir3 2005-08-04
  • 打赏
  • 举报
回复
不会,你进行数据的转换与处理中是不可能触发Receive事件的,只要是同一个线程。
jjiaming 2005-08-04
  • 打赏
  • 举报
回复
to hyamw(林锋) :
如果正在进行数据的转换与处理,而这个时间正好Recevice事件又被触发了,那岂不是冲突了,这种可能性也不是没有啊
fisker0303 2005-08-04
  • 打赏
  • 举报
回复
UDP的话,一个包最好限制在0.5K。
jjiaming 2005-08-04
  • 打赏
  • 举报
回复
哦,这样啊。这下心里有底了
hyamw 2005-08-04
  • 打赏
  • 举报
回复
偶曾经做过一个跟你说的类似的:不过稳定性没有经过彻底的测试。有问题大家讨论一下。
首先给accept的时候每个客户端都建立一个缓冲区。
如果recv到数据,则添加到缓冲区末尾。然后检查缓冲区中收到的数据。数据包应该有自己定义的格式:

数据包头标志|数据包长度|数据包内容|数据包尾标志

以上只是个例子,首先第一个应该是包头标志,如果不是,丢弃数据。然后根据数据包长度检查数据包尾标志,如果缓冲区的总数据长度小于数据包长度,则表示数据包接收还不完整;如果大于等于数据包长度,则查看包尾的位置是否为数据包尾标志,如果不符合,表示数据包有问题。你还可以加上其他的校验手段。
如果检查到有完整的数据包收到,进行相应的处理,并把数据包从缓冲区中删除。(剩下的数据不要删除哦,有可能是下一个包的数据)。缓冲区可以用队列来做

不过有个问题就是,服务器端需要给每个客户端都建立一个缓冲区,如果客户端数据太多的话,问题就大了。再有就是缓冲区大小的到底取多少。
对于你的需要来说,20个客户端,应该不是大问题。传输数据的最大量为30K的话,缓冲区取60K+就可以了。
jjiaming 2005-08-04
  • 打赏
  • 举报
回复
那是不是需要用多线程来替换OnReceive 啊
快乐鹦鹉 2005-08-04
  • 打赏
  • 举报
回复
用UDP不可靠。这是肯定的
jjiaming 2005-08-04
  • 打赏
  • 举报
回复
用udp可靠吗
dirdirdir3 2005-08-04
  • 打赏
  • 举报
回复
1.大概8k吧,一次。
2。可以。
3。的确是这样,要自己订立一个协议来接收包,否则用UDP也可以。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧