搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 没分了,但是帮忙看看,Socket 用 recv()接收结构体数据不完整问题
标题:
没分了,但是帮忙看看,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
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-430913-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.309937 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved