社区
网络及通讯开发
帖子详情
使用TCustomWinsocket时,发送数据和接收数据不一致的问题
szy2000
2002-11-03 02:53:35
在使用Bc6中TCustomWindsocket的ReceiveBuf函数接收数据时,有时经常会出现接收到的数据长度小于发送的数据长度。好像是由于Tcp数据分段引起的,而我传送的数据是自定义的格式化数据,一分段就麻烦大了,有没有什么办法能解决这个问题?有没有什么比较简单的方法,使得发一次数据,接收方只需要接收一次次就可以把数据完整的接收下来?
...全文
180
9
打赏
收藏
使用TCustomWinsocket时,发送数据和接收数据不一致的问题
在使用Bc6中TCustomWindsocket的ReceiveBuf函数接收数据时,有时经常会出现接收到的数据长度小于发送的数据长度。好像是由于Tcp数据分段引起的,而我传送的数据是自定义的格式化数据,一分段就麻烦大了,有没有什么办法能解决这个问题?有没有什么比较简单的方法,使得发一次数据,接收方只需要接收一次次就可以把数据完整的接收下来?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
szy2000
2002-11-05
打赏
举报
回复
Thanks invalid,我按你的方法试一试
我不懂电脑
2002-11-05
打赏
举报
回复
如果包不是很长可以用udp
warton
2002-11-05
打赏
举报
回复
对,高手说的对!!
invalid
2002-11-05
打赏
举报
回复
不能依靠tcp来保证你的包不会被分开,如果你的报足够小tcp有可能合并你的包,所以你的结构应该是包长加包体,这样就绝对不会出错.
szy2000
2002-11-05
打赏
举报
回复
to bacer,我就是这么做的,问题就出在这,TCP会把报文分段,4000字节会有可能是分两次收到的,这样收到的数据就可能不是我原先定义的结构了,除非自己重新组报,但实现起来比较麻烦,有没有什么办法是报文不会分段或者合并,是不是只要使数据长度小于TCP下层协议的最大报文长度就可以了?
bacer
2002-11-03
打赏
举报
回复
预先将要发送的数据分配好,比如发送10次,每次4000字节
那么每次发送的时候加上当前块的编号以及总的块数就行了
说白了就是自己写一个协议,双方按照这个协议执行就可以咯
invalid
2002-11-03
打赏
举报
回复
比较简单的办法就是:
用socket发送接收应该定义发送的长度,每次发送数据都先发送长度,这样接收方先接收长度,然后接收数据,这样保证不会混乱.
你想什么都不做,就达到要求是不可能的.
Socket发送只是把数据交给缓冲区,至于数据到底是怎么发送,分几个包是有底层协议决定的.
szy2000
2002-11-03
打赏
举报
回复
不行阿,我发送的数据是二进制
webmin
2002-11-03
打赏
举报
回复
你用ReceiveText试试。
DELPHI下的SOCK编程[收集].pdf
DELPHI下的SOCK编程[收集].pdf
DELPHI下的SOCK编程
详细讲解了Delphi环境下的sock编程方法
Delphi TCP/IP通信
用delphi6编写,利用server
socket
和client
socket
进行通信的程序
基于C_C构架下文件断点传输的实现
介绍基于C- C( 客户———客户) 构架的网络文件断点续传功能的实现
Delphi---TServer
Socket
和TClient
Socket
发送和接收大数据包
https://www.cnblogs.com/zhangzhifeng/p/6065244.html TServer
Socket
和TClient
Socket
用非阻塞模式发送和接收比较大的数据
时
,可能一次会接收不完,此
时
需要通过循环接收。 //接收 procedure TMAINFORM.TCPServer1ClientRead(Sender: TObject;
Socket
: TC...
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章