写了一个基于C/S结构的简单视频分发软件,编解码一切ok。但现在发现在网络穿透方面有些问题。我的系统工作流程是:服务器端运行在具有公网IP地址的PC上,客户端则运行在不同互联网接入方式的PC上(可能是基于局域网,也可能是基于公网)。服务器端进行采集编码,客户端登录接收视频,然后解码播放。 我用的是UDP协议,测试时,发现在有些网络环境下,网络连通出现问题,主要表现为:1.客户端无法登录,即客户端无法将认证信息发往服务器端。
2.客户端可以登录成功,但随后收到的视频包出现了丢包,本来是1K的内容,却只接收几十个字节。
我想这可能是因网络穿透产生的问题,可能是因路由器将数据截断或某些firewall屏蔽了通信端口。但有什么解决方案能够保证穿透绝大部分网络呢???就像QQ或MSN一样,能够保证运行在大多数网络环境下能够登录成功呢???请大家给点意见,非常感谢。

解决方案 »

  1.   

    qq就是这么做的,至于msn原本就是tcp的
      

  2.   

    谢谢你的回复,但你想一想,发送视频这么大的数据量,使用TCP协议,如何保证效率???
      

  3.   

    用UDP也没有问题,关键要处理丢包的问题,也就是用UDP模拟TCP.
      

  4.   

    aa3000(k杀手)你说得有道理,能否详细些???倒底如何处理丢包问题????
      

  5.   

    要想保证udp不丢包,只能在上层协议中建立类似于TCP的确认机制及时重新发送丢掉的数据包
      

  6.   

    是你的协议的问题。要加管理和控制协议的。流媒体一般用rtsp,你可以看看这个协议怎么实现的,是开源的。mms不开源。最简单的就是用windows2003流媒体服务。
      

  7.   

    各位,可能没明白我的意思,我不是要保证UDP不丢包,而是要如何穿透层层网关,保证将数据包准确发送到目的地。也就是说保证数据包不在传输的过程中,被网关或路由以及NAT截断。这才是我要讨论的问题。
      

  8.   

    udp丢包与能不能穿透网关没有关系,udp本身就是无连接协议,同一批包可能走不同的路由,如果你要保证不丢包只能用tcp,或udp模拟tcp,但是这样就完全没有udp的优势了,udp适合小文件,大文件建议tcp