本帖最后由 oyljerry 于 2012-04-02 10:59:53 编辑

解决方案 »

  1.   

    用TCP并不合适。语音丢掉几个包,依然可以听。而如果等待TCP重传,则需要忍受延迟。因此一般都是用UDP(RTP)的。
    阻塞意味着一个线程需要等待,直到一个socket上特定事件发生才继续走。如果socket很多,则不适合n个线程等待。
    非阻塞的socket效率并不一定高。比如recv,没有收到东西,如果又需要循环去继续收,那还不如阻塞。只不过非阻塞的socket,没收到东西,你也可以先干点别的事再来收。
    你要考虑的是IO模型:
    select模型 
    WSAAsyncSelect模型 
    WSAEventSelect模型 
    Overlapped I/O 事件通知模型 
    Overlapped I/O 完成例程模型 
    IOCP模型
      

  2.   


    对这些模型都不怎么了解,除了select模型之前看过之外,但是现在又忘记了.现在最怕的就是线程间同步的问题,对于UDP(RTP)只找到一些开源的库,现在估计是来不及去学这些开源的库怎么用了.目前已经改成了UDP,感觉好了很多,但是偶尔会错,有可能是在线程同步时出了问题,你能大致跟我讲一下那些模型吗?谢谢..
      

  3.   

    实验室的东西用啥都行,忽悠完老师就OK了
    UDP可能不适合你,TCP更合适,不用管阻塞好还是
    非阻塞 ,用自己熟悉的模型就好。
      

  4.   


    谢谢大家!大家都说4楼ndy_w (carpe diem)说得不错,有点深入,虽然我看不懂..不过还是让我了解了不少东西.算了,结帖吧!