关于TCP协议接收数据问题

2019-07-17 11:11发布

我用TCP协议接收下位机发送的数据,由于数据量很大,所以TCP一帧一帧的发送。请问我该怎么设置一个缓存区将数据先缓存起来然后一起取出,由于我对TCP不是很了解,所以不知道怎么设置缓存区,导致收到的数据只有最后一帧的数据,求大神帮忙看下程序指点一下。
改版网口通信.zip 下载积分: 积分 -1 分
11.53 KB, 下载次数: 356, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
小鹰fighting
1楼-- · 2019-07-17 14:55
版本过高,看不到,我觉得可以用队列,收到数据就入队
bamenwhj
2楼-- · 2019-07-17 20:42
楼上说版本太高我就不看程序了。
【读取TCP数据】自带缓冲区的,把超时设成-1,读取的字节即缓冲区的大小,那样每次都收到的指定字节长度的数据。
mean123
3楼-- · 2019-07-18 00:21
 精彩回答 2  元偷偷看……
ferriteemi5149
4楼-- · 2019-07-18 05:40
用消息队列吧,或者TDMS文件等中间介质
bamenwhj
5楼-- · 2019-07-18 06:47
本帖最后由 bamenwhj 于 2015-12-15 15:00 编辑
mean123 发表于 2015-12-15 12:46
下位机一次发送的数据量很大,所以一帧一帧的传送,我程序里面读取TCP数据函数放在while循环中,所以每次也是一帧一帧读,但前一次读取的数据会被下一次数据覆盖。我在网口调试助手里面发送123给我的程序,重复发送10次,结果只有一次的数据就显示123而不是123连续十次出现,请问我该怎么解决? ...


1、模式为默认值,超时为-1,字节大小为30=3*10,即一次读出10个123:“123123123123123123123123123132”;
关于【读取TCP数据】,模式一般选取默认值(即标准模式),读取的内容由字节大小决定,对于变长度的数据,一般的协议中会用前两位表示这一帧数据的长度,先读出数据长度,再读数据。
2、如果你要的是10次123(而不是一次连续的10个123),那你的程序也可以认为是正确的,只是读的很快,你看不出连续的10次。如果你想要记录相应的数据,可以考虑入队列的方法,每次接收到即入一次队列。
mean123
6楼-- · 2019-07-18 07:36
bamenwhj 发表于 2015-12-15 14:59
1、模式为默认值,超时为-1,字节大小为30=3*10,即一次读出10个123:“123123123123123123123123123132”;
关于【读取TCP数据】,模式一般选取默认值(即标准模式),读取的内容由字节大小决定,对于变长度的数据,一般的协议中会用前两位表示这一帧数据的长度,先读出数据长度,再读数据。
2、如果你要的是10次123(而 ...

我按照你说的把模式改为默认超时设为-1,通过网调试助手发数据过了很久才收到怎么回事,我改为immediate,就可以立即收到数据。这是什么问题?

一周热门 更多>