关于 MNUDP 控件接受数据的问题 !

大大怪老张 2002-12-17 07:08:19
大家知道 MNUDP 控件的OnRecived 事件会在该控件收到数据的时候触发。

我想问的是如果第一个数据到达,触发了该事件,执行事件下的代码,但代码没执行完(或者操作没完成,比如写文件)的话又收到数据,这个时候mnudp会如何处理?
...全文
27 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
大大怪老张 2002-12-18
  • 打赏
  • 举报
回复
呵呵,这是个好方法。我再考虑考虑。
copy_paste 2002-12-18
  • 打赏
  • 举报
回复
哦,INDY那里有个组件,不记得是什么了,它是在线程进行与其它进行交互的,如果有数据来的话,就TThread::Synchronize(DoRead); DoRead是一个调用组件事件方式,这样就形成同步了,完成后又进入线程。。。
大大怪老张 2002-12-18
  • 打赏
  • 举报
回复
我用fastnet是没办法。。。呀。 可怜。
大大怪老张 2002-12-18
  • 打赏
  • 举报
回复
不过FASTNET的没源码看,我也不清楚它是多线程接收数据,或是什么,以前看了段INDY的程序,它接收数据时是使用同步的方法来处理接收事件的,所以我想FASTNET不会太笨吧,应该不会出现你的事。


这里面提到indy接受数据时是同步的,能否再解释一下如何同步?
copy_paste 2002-12-18
  • 打赏
  • 举报
回复
怎么到处问,hoho,来捞分啦。

如果是基于事件编程的话,那么基本上的VCL组件都是消息驱动,或者说是线程同步,所以当你代码没执行完,是不可能有其它事件会触发执行的,所以不用考虑。

不过FASTNET的没源码看,我也不清楚它是多线程接收数据,或是什么,以前看了段INDY的程序,它接收数据时是使用同步的方法来处理接收事件的,所以我想FASTNET不会太笨吧,应该不会出现你的事。

UDP的接收缓冲不太清楚是多少,TCP的是8K,可以通过WinSock::setsockopt进行调节吧。

这年头不建议使用FASTNET的东东,没源码,想帮你看看都没法子,用INDY吧,找空心菜就行了,呵呵
大大怪老张 2002-12-18
  • 打赏
  • 举报
回复
我测试了一下,发现不会丢失数据(至少在某个范围内不会)。

是这样:
我在onrecived事件里设了断点,然后我发送数据,当udp收到数据后,程序停在断点处,而我继续发数据(数据<2048, 次数<10),然后 f8继续执行刚才中断的程序,发现udp触发onrecived的次数跟我发送的次数是一样的。

我想这可能是udp的数据缓冲区在起作用。这个数据缓冲区有多大?
大大怪老张 2002-12-17
  • 打赏
  • 举报
回复
怎么避免呢?


我记得以前有人说过,说upd自己有个缓冲区,可以保存接收到但未来得及处理的数据,是否有这回事? 如果有的话该如何利用,比如把它设大点。
NowCan 2002-12-17
  • 打赏
  • 举报
回复
可能会丢失

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧