|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 没分了,但是帮忙看看,Socket 用 recv()接收结构体数据不完整问题
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
4039
人关注过本帖
标题:
没分了,但是帮忙看看,Socket 用 recv()接收结构体数据不完整问题
只看楼主
加入收藏
wtw199186
等 级:
论坛游民
帖 子:55
专家分:78
注 册:2012-9-22
结帖率:
57.14%
楼主
收藏
已结贴
√
问题点数:6 回复次数:11
没分了,但是帮忙看看,Socket 用 recv()接收结构体数据不完整问题
定义了一个结构体,发现服务器端向客户端发送数据时,客户端接收到的数据有时候会少于发送端发送的字节数,我结构体大小为248字节,但是接收端有时会受到220和28个字节的情况,接收的buffer足够大,刚学习这方面,请大侠们指点一下
搜索更多相关主题的帖子:
Socket
服务器
结构体
客户端
2014-05-02 09:16
举报帖子
使用道具
赠送鲜花
fragileeye
等 级:
职业侠客
威 望:
2
帖 子:107
专家分:387
注 册:2011-5-21
第
2
楼
收藏
得分:2
你用tcp还是udp?说清楚!目测是tcp,流式的,没有消息边界。这很正常,没谁要求流式传输会一下传输完整。好好看书。
2014-05-02 14:12
举报帖子
使用道具
赠送鲜花
wtw199186
等 级:
论坛游民
帖 子:55
专家分:78
注 册:2012-9-22
第
3
楼
收藏
得分:0
回复 2 楼 fragileeye
谢谢你的回复,我的确是用的TCP,我想问问,如果对方发送的结构体数据还没有完整的送到我接收端,那么我的接收端recv()函数怎么就可以得到那部分不完整的数据,是不是发送端即使没有将一个完整的结构体数据发送过来,我接收端也可以接收到已经发送的那部分不完整的数据,如果我想正确得到数据,是不是要将接收到的不完整的那两部分数据拼接在一块,组成的就是完整结构体数据?
2014-05-02 15:31
举报帖子
使用道具
赠送鲜花
top398
等 级:
蝙蝠侠
威 望:
2
帖 子:427
专家分:857
注 册:2014-5-2
第
4
楼
收藏
得分:2
理解正确。直到 recv() 返回值为0时才算是一次接收完成。
[
本帖最后由 top398 于 2014-5-2 23:39 编辑
]
2014-05-02 23:38
举报帖子
使用道具
赠送鲜花
wtw199186
等 级:
论坛游民
帖 子:55
专家分:78
注 册:2012-9-22
第
5
楼
收藏
得分:0
回复 4 楼 top398
谢谢
2014-05-03 00:36
举报帖子
使用道具
赠送鲜花
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
6
楼
收藏
得分:2
怎麽能夠靠這種方法做數據通訊呢,數據接著數據,憑什麽這個數據後面就沒有數據再進來,一定有零的麽。
授人以渔,不授人以鱼。
2014-05-03 00:50
举报帖子
使用道具
赠送鲜花
top398
等 级:
蝙蝠侠
威 望:
2
帖 子:427
专家分:857
注 册:2014-5-2
第
7
楼
收藏
得分:0
以下是引用
TonyDeng
在2014-5-3 00:50:34的发言:
怎麽能夠靠這種方法做數據通訊呢,數據接著數據,憑什麽這個數據後面就沒有數據再進來,一定有零的麽。
按楼主的意思是只接收一个结构体,因此这样无妨。当然服务器最好在发送一个结构体后,就 closesocket/shutdown。更多数据的情况下,就需要服务器与客户端预先协商,究竟要传送多少数据?
2014-05-03 01:15
举报帖子
使用道具
赠送鲜花
fragileeye
等 级:
职业侠客
威 望:
2
帖 子:107
专家分:387
注 册:2011-5-21
第
8
楼
收藏
得分:0
ps:结构体传输,虽然我以前做的时候没有定义传输字段大小,但这是不严格的。
不要依赖协议为你提供的保证,写代码越谨慎,调试越轻松。
re:是否接受完整,可以通过recv的返回信息判断的。一般recv一次性接受一个不大的结构体,是可以满足的。
强烈建议参考ps内容。
2014-05-04 10:34
举报帖子
使用道具
赠送鲜花
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
9
楼
收藏
得分:0
當然要做收發溝通協議,發送什麽數據,需要如何接收,有個約定的信號,先發過去提醒接收方要做什麽動作,然後才發送,大家都按協議執行,不是僅靠TCP/IP通訊就可以搞定的。
授人以渔,不授人以鱼。
2014-05-04 11:04
举报帖子
使用道具
赠送鲜花
Andrew_Lee
等 级:
黑侠
威 望:
3
帖 子:185
专家分:626
注 册:2014-3-21
第
10
楼
收藏
得分:2
数据包分片了吧
2014-05-04 11:07
举报帖子
使用道具
赠送鲜花
12
1/2页
1
2
快速回复:
没分了,但是帮忙看看,Socket 用 recv()接收结构体数据不完整问题
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.034107 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved