UDP通信

前段时间在做智能公交系统项目,项目中的公交终端跟服务器,用UDP进行通信的。

客户端不断的将数据传到服务器,这里为什么采用UDP进行通信?因为 我们的客户端要不断的将数据传到服务器,传输的数据比较频繁,数据量比较多, 这里不要求数据的传输的准确性,所以采用了udp,而不是tcp.

   

项目中还存在另一种情景,就是服务器要向客户端下发命令。就是用户通过web可以向终端发送信息,这里也采用了udp,个人感觉这时可能采用TCP会更好一些,因为这里要有一个近回值,告诉服务器下发指令是否成功。因为udp通信,是无法知道返回值的,客户端必须人为的加上返回值。

服务器端代码如下

在下发数据时,实际上服务器端是跑的udp的客户端。

   

屏幕剪辑的捕获时间: 2015-05-05 13:56

   

客户端实际跑的是udp服务程序

   

   

屏幕剪辑的捕获时间: 2015-05-05 14:12

<<UdpServer.java>>

udp打洞:

以上的想是挺好的,并且测试代码也已经测试通过,但是在3g移动网络下受限制,在3g下开一个服务器,没有指定绑定的某个端口号。比如手机也分配一个IP地址,这个地址也是内网,也不是公网的IP。当客户端向手机上的服务器端发数据,是发不过去的,因为并没有将端口打开。

这个问题如何解决呢?因为手机分配的地址也不是公网,是处于运营商内部的网络,也相当运营商公网里的一个内网。这里就用到udp打洞技术,利用客户端不断的向服务器发送心跳包,这样就可以暴露出客户端UDP传输的端口号,然后服务器就可以向客户端发送消息。

转载于:https://www.cnblogs.com/xiaowenhuman/p/4487817.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值