有没有别的函数或者别的方法来代替sleep,如果没有,sleep后面的数应该多少最好?发送是在一个while循环里面,循环的次数不固定,肯定在10次以内.每次发送的数据不超过30个字节.PS:不要说组包什么的,因为每一次发送的数据不一定是发送到同一地址.

解决方案 »

  1.   

    簡單一點的方法是
    發一個包,收到回應後再發下一個高級一點的, 每次用動態RTTI 來判斷超時再高級一點,用滑動窗口協議 + 動態 RTTI 來做超時與窗口大小選擇再高級的,我也不會了
      

  2.   

    之所以不用对话就是为了提高效率以及简化程序.这个程序有一部分是采用tcp协议的,对于要求不高的部分就用了udp.在不用对话的方式下怎么处理?
      

  3.   

    用select检测是否有数据发送过来
      

  4.   

    发送端:
    SOCKET s=socket(AF_INET,SOCK_DGRAM,0);
    bind(......);
    if(WaitForSingleObject(event_work,1000)==WAIT_OBJECT_0)
    while(!listRequest.empty())
    {
        ......
        sendto(......);
        //在这里加sleep就一切正常
    }
    接收端:
    socket(......);
    select(FD_READ,......);
    bind(......);
    if(netEvents.lNetworkEvents&FD_READ)
    {
        onread();
    }
    数据是在onread里面使用ReadFile读出来的.PS:
    上面的机制肯定没有问题.因为加了sleep之后没有任何故障.现在的问题是为什么要加sleep,或者有没有其它方式可以取代?
      

  5.   

    问题已经解决了.
    :)在FD_READ事件时,先sleep(0)再用ReadFile接收,所有问题排除......分给谁呢?
      

  6.   

    问题已经解决了. 
    :) 在FD_READ事件时,先sleep(0)再用ReadFile接收,所有问题排除......分给谁呢?------------------
    你的問題只是貌似解決了,等你到了外網,或帶寬比軟小,或帶寬變化大的環境,你這個方法絕對會出問題。