用监测工具监测到本地端口已经接收到数据,这说明数据包没丢。
但是OnReceive函数就是不触发。
为什么?

解决方案 »

  1.   

    OnReceive函数从未被调用过是吗?怎么Create的?
      

  2.   

    int m_Port = 6666;
    m_pUDPSocket->Create(m_Port, SOCK_DGRAM);//m_pUDPSocket为继承自CAsyncSocket的类的对象指针
    OnReceive为m_pUDPSocket指向类成员函数监测工具监测到数据包时,系统没有调用m_pUDPSocket中的OnReceive()函数
      

  3.   

    to 6楼
    IP和端口设置应该没有问题。这个也不是开始就不能用
    具体表现为
    OnReceive的响应次数一直在减少->现在的不响应。可能是过个年程序吃多了
      

  4.   

    OnReceive的代码怎么写的?是不是有没调用ReceiveFrom的时候?
      

  5.   

    我们公司的程序也遇到过类似问题:
    CAsyncSocket接收时在自己缓冲区中保留一帧的情况。上一帧只有收到下一帧时才能读出来,而用网络侦听工具能确认上一帧已经收到了。
    最后没法子换ACE了。。另外另一个用CAsyncSocket的程序,发现在send的时候明明没有发送出去,但是返回值却跟发送成功一模一样,换ACE代价太大,正在苦恼中借贵宝地一用,希望有人能解释一下,给个建议。。
      

  6.   

    在找我的问题的时候,看到了跟你的问题相关的讨论:
    CAsyncSocket会把收到的数据包存在一个队列里,等待OnReceive()函数慢慢处理,也就是OnReceive()函数处理一个包,CAsyncSocket再次触发OnReceive()函数处理下一个包。这样的话如果OnReceive处理的慢了,等待处理的数据就会积累在他的缓冲区里。
    一个可以考虑的办法是自己建立缓冲区,把接收到的数据写入缓冲队列中,每次触发了OnReceive就另起一个线程把没有处理的数据处理掉。仅供参考!
      

  7.   

    to 8
    OnReceive根本就不进入 写什么代码也是白搭的呀.....我的也是图像数据!!!
      

  8.   

    发送UDP包端 点对点发送数据包 在UDP包前还得加个ARP包 不理解这是怎么回事 按道理来说我程序接收某端口的UDP包 凡是UDP包都可接收啊 为什么要在开始加个ARP包 希望有人解释下