C++ Builder下三种UDP通信实现方法的比较[转]

本文对比了C++ Builder下三种UDP通信方法:NMUDP控件、IdUDPServer控件和底层Socket。NMUDP控件简单但缓冲区限制为2K,IdUDPServer虽支持更大缓冲但效率较低,而Socket虽然复杂但效率高,适合大量数据传输需求。
摘要由CSDN通过智能技术生成
关键字   C++ Builder下三种UDP通信实现方法的比较 
出处    
 
 主要讨论一下数据的接受:
1.NMUDP控件
   这个控件使用起来比较简单,设定监听端口,然后响应DataReceived事件就可以了,例如:
void __fastcall TMoniter::NMUDPDataReceived(TComponent *Sender,
      int NumberBytes, AnsiString FromIP, int Port)
{
    /* 用一个标志变量控制控件受信后是否执行需要的操作 */
    if (recvFlag)
    {
        int rl;
        /* 用于接受数据的内存 */
        unsigned char rbuf[1024 * 9]; 

        /* 控件的ReadBuffer方法,把接受到的数据存储到rbuf */
        NMUDP -> ReadBuffer(rbuf , sizeof(rbuf) , rl);
        
        /* 字符串结束 */
        rbuf[rl]=0;

        /* stream是事先定义的文件指针 */
        if (stream != NULL)
        {
            /* 自编doLog函数,把接收数据写入日志文件 */
            doLog( false , rbuf ,rl  ;
        }
    }
}
这个控件的优点是使用简单、效率比较高,但是只支持2K的缓冲,所以上面开辟的9K内存是多余的。2K的限制使我在项目中不得不放弃了这个控件。

2.IdUDPServer控件
  使用方法跟NMUDP差不多,响应UDPRead事件就可以了,例如:(注释参考1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值