社区
网络及通讯开发
帖子详情
问:IdTcpServer和IdTcpClient的缓冲区如何控制?多线程写入会造成缓冲区溢出或者丢失包吗?
proton
2006-06-08 11:24:20
我有多个线程同时调用一个IdTcpClient的writebuffer方法写数据,会不会造成缓冲区溢出?或者死锁,丢失包?
如果大量数据涌入我的IdTcpServer,我还没来得及读出,TCP是丢弃大过缓冲区的包吗?
...全文
844
10
打赏
收藏
问:IdTcpServer和IdTcpClient的缓冲区如何控制?多线程写入会造成缓冲区溢出或者丢失包吗?
我有多个线程同时调用一个IdTcpClient的writebuffer方法写数据,会不会造成缓冲区溢出?或者死锁,丢失包? 如果大量数据涌入我的IdTcpServer,我还没来得及读出,TCP是丢弃大过缓冲区的包吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bxjgood66
2006-11-13
打赏
举报
回复
mark
无风飞尘
2006-09-02
打赏
举报
回复
注意我的是用Server发送,Client接收的
无风飞尘
2006-09-02
打赏
举报
回复
IdTcpServer和IdTcpClient的缓冲区如何控制?
发送:
repeat
try
FThread.Connection.OpenWriteBuffer;
BlockRead(GnFile, Buf, SizeOf(Buf), NumRead);
FThread.Connection.WriteBuffer(Buf,NumRead);
FThread.Connection.CloseWriteBuffer;
except
CloseFile(GnFile);
exit;
end;
until (NumRead = 0);
接收:
GnStream:=TFileStream.Create(FFileName,fmCreate);
GnStream.Size := FSize;
GnStream.Seek(0,soFromBeginning);
Client.ReadStream(GnStream,FSize);
多线程写入会造成缓冲区溢出或者丢失包吗?
不会丢包的,也不会溢出的,你不要看上面发送时是一个劲地在那里发,但其实不是的,如果接收端接到一半暂停下来,发送方也会停下来,IdTcpServer和IdTcpClient里面已经封装好了的功能,可以放心用.
iec
2006-07-26
打赏
举报
回复
可以把发送和接收缓冲区设置大一些.
多个线程肯定要同步.按TCP传输协议,它应该有流量和拥塞控制.
sfengnet
2006-07-24
打赏
举报
回复
IdTcpClient 在发送的时候是先将数据发送到系统缓存区,然后由系统向目的地发送数据包的,如果缓存区空间已满,你往里写数据的时候会提示错误的(程序中),而实际运行中你可以通过判断发送的返回值来确定当前的数据是否正常发送出去,如果发送失败,则暂停一会再发试试.
不知道楼主明白了没有
proton
2006-07-21
打赏
举报
回复
up
proton
2006-06-15
打赏
举报
回复
没人会吗?
proton
2006-06-09
打赏
举报
回复
Tcp不是保证数据的传输到达码? 也会丢包?
sfengnet
2006-06-08
打赏
举报
回复
如果是多个线程调用一个 IdTcpClient的writebuffer方法 ,建议你用 临界区,
class TSection
{
public:
CRITICAL_SECTION css;
TSection(){ InitializeCriticalSection( &css ); }
~TSection(){ DeleteCriticalSection( &css ); }
void Enter(){ EnterCriticalSection( &css ); }
void Leave(){ LeaveCriticalSection( &css ); }
};
数据包过多,而你不去读取的话是会丢失的,不过对方应该也发不出去了
tianshu888
2006-06-08
打赏
举报
回复
路过,帮你up
Indy 10.1.5.0 网络组件库帮助文档
在当今软件开发领域中,Indy库作为一个稳定、高效的网络通信框架,已成为构建各种网络应用程序的基石。Indy库采用了面向对象的设计理念,核心架构注重于实现多种网络协议的简化接口和灵活使用,使得开发者能够轻松地处理网络通信的各种需求。Indy库的设计考虑了跨平台的兼容性,允许应用程序在不同的操作系统上无缝运行,同时提供了模块化的组件,以方便根据项目需要进行选择性引入和优化。
基于无线网络的Delphi远程监控系统开发实战
Delphi作为一款集可视化设计、快速开发和高性能编译于一体的集成开发环境,广泛应用于Windows平台下的桌面应用程序开发。本章将深入剖析Delphi
ID
E的核心架构与功能模块,
包
括项目管理器、对象查看器、窗体设计器以及调试工具链的协同工作机制。重点介绍其基于组件的开发模式如何提升开发效率,并结合实际监控程序开发需求,阐述环境配置、第三方库引入、跨平台兼容性设置等关键操作流程。// 示例:一个简单的VCL窗体初始化代码beginCaption := '无线监控客户端';// 窗体居中显示。
Delphi 5.x分布式多层应用系统开发实战详解(含书配套源码)
可通过$IFDEF指令实现条件编译,适应不同部署环境:{$ENDIF}{$ELSE}{$ENDIF}上述模式实现了编译时配置切换,无需修改主逻辑代码。
UWB-IMU、UWB定位对比研究(Matlab代码实现)
UWB-IMU、UWB定位对比研究(Matlab代码实现)内容概要:本文围绕UWB-IMU与UWB定位技术的对比研究展开,通过Matlab代码实现对两种定位方式在带延迟情况下的性能进行分析与比较。研究重点在于多传感器融合算法的应用,特别是扩展卡尔曼滤波(EKF)在UWB-IMU系统中的融合定位效果,旨在提升定位精度与鲁棒性。文中提供了完整的Matlab仿真代码,便于读者复现和进一步优化算法,适用于需要高精度室内定位的科研与工程应用场景。; 适合人群:具备Matlab编程基础,从事无线定位、传感器融合或导航系统研究的科研人员及工程技术人员。; 使用场景及目标:①研究UWB与IMU融合定位的技术优势;②对比分析UWB单独定位与UWB-IMU联合定位的精度差异;③掌握EKF在多传感器融合中的实现方法; 阅读建议:建议结合提供的Matlab代码进行仿真实验,重点关注数据预处理、滤波算法实现及定位误差分析部分,可通过调整噪声参数或引入实际测试数据来验证算法的适应性。
YatMn_manus-credit-manager_23160_1764953278723.zip
YatMn_manus-credit-manager_23160_1764953278723.zip
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章