本次测试参数:
服务端是公网固定IP;两个客户端A和B分别位于不同电脑,不同宽带,不同型号路由后面(一个家庭路由,一个企业路由),且路由没有经过特别的设置。
测试没有什么特别的地方,只是依照网络资料进行实验。如下图:

说明:
当A端用UDP向服务端发送了一个包后,在服务端就得到A端来路的IP和端口:xxx.xxx.xxx.101:5841
当B端用UDP向服务端发送了一个包后,在服务端就得到B端来路的IP和端口:xxx.xxx.xxx.105:12584
这时A、B两端的路由就相当于是打开一个通道来给A、B向外通信。不光是服务端可以和A、B通信,由于通道已经打开了,那么:
A就可以向B已经打开的通道(B=xxx.xxx.xxx.105:12584)直接发送信息。
同理:
B也可以向A已经打开的通道(A=xxx.xxx.xxx.101:5841)直接发送信息。

注意:A、B之间通信貌似有一个先后顺序,我忘记了~,反正都发送试试就行了

最后:UDP通信在一些情况下比TCP要“灵敏”一些(可能用词有点不妥,我也不知道该怎么形容)。
比如有的时候宽带已经拨号成功了,TCP却怎么都连接不上服务器,浏览器打开网页也一样,要等很久的时间后TCP才能正常通信。
而在TCP不能连接的这段时间,UDP却是正常的。
但是使用UDP绝对不是一个省心的活:
--需要设计一套合理的包协议
--对信息完整性要求高的话,还需要重发处理
--对适应性要求高的需要配合TCP使用
现在的网络环境都比较好,UDP发送的成功率能达到98、99%,甚至更高吧(我没有做足够大量的测试,只是感觉)。

在当时复杂,不稳定的网络环境下,QQ竟然选择以UDP为主要的通信协议,而同期的ICQ和MSN等都以TCP为主,可以说马化腾当时的设计是激进而大胆的。
模仿并不意味着追随和落后,重要的能够在一个旧框架下注入新的思维。这也应该是马成功的必然性之一吧。

最新文章

  1. Ionic2系列——使用DeepLinker实现指定页面URL
  2. sql数据库表被锁,无法查询
  3. linux中用户、组的管理(密码管理、权限管理及其修改用户、组)(转)
  4. ios获取一个文件夹下的文件(夹)列表
  5. Windows Internals学习笔记(三)Procdump的使用
  6. [USACO精选] 第二章 动态规划(一)
  7. strlen() 和 sizeof() 在字符串中的使用
  8. js 前加分号和感叹号是什么意思?
  9. 设计模式之单例模式(Singleton Pattern)
  10. Codevs 3289 花匠 2013年NOIP全国联赛提高组
  11. TCP/IP 邮件的原理
  12. MVC插件实现
  13. java 导出blob图片到excel
  14. BZOJ2565: 最长双回文串(回文树)
  15. 测试修改gcs_server_processes参数
  16. JAVA 数组作为方法返回值—返回地址
  17. GMT\UTC YYYY-MM-DDTHH:mm:ss.sssZ、YYYY-MM-DDTHH:mm:ss.sss+8:00意义及与北京时间转换
  18. 转://Oracle中定义者权限和调用者权限案例分析
  19. 【SRM-06 D】五色战队&&【codeforces 788E】 New task
  20. 洛谷P1315 观光公交

热门文章

  1. Transmission : 如何在Fedora下使用BT下载
  2. Canvas绘制渐变
  3. 安装yii2时出错 Invalid Parameter – yii\base\InvalidParamException
  4. Shell入门教程:Shell的基本结构
  5. Spring中集合类型属性注入
  6. Javascript实现图片预加载【回调函数,多张图片】
  7. javascript基础02
  8. window跳转页面
  9. .NET程序员转Java不完全指南
  10. [BI项目记]-搭建代码管理环境之创建团队项目