android手机与服务器基于UDP协议的通信

本文介绍了一个基于Android手机的百度地图位置共享应用的开发,由于百度服务器未提供API,故采用UDP协议进行socket通信。为避免socket阻塞,使用两个socket分别进行定位信息的发送和接收。服务器通过记录socket连接的IP和端口号,实现向Android客户端发送其他手机的定位信息。
摘要由CSDN通过智能技术生成

由于第一次写博客,所以在表述上难免会有所欠缺,欢迎大家给予指正!

首先描述一下我所做的小项目:项目是基于android手机的百度地图位置共享应用的开发。由于百度服务器暂时没有提供api支持获取别的用户手机的位置。因此要实现一部手机与其他手机进行定位共享,必须采用socket进行通信。基于UDP协议的优点,项目通信模块采用了UDP协议进行定位信息的接收和发送。由于手机客户端一方面要每隔一定时间就要接收百度地图服务器发送过来的本手机的定位信息、并立即发送给自己的服务器,同时手机客户端一方面要不停的从自己的服务器那里接收其他手机发送过来的定位信息。因此,如果仅采用一个socket进行定位信息的接收和发送,容易造成socket阻塞(有可能客户端正在向服务器发送数据,这时,服务器也正在向客户端发送数据),程序不好控制。因此,我采用两个socket与服务器进行通信。这样一来,有两个实现方式:一是,android在发送定位信息时的身份是客户端的形式,当android手机接收定位信息时的身份是服务器端的形式(即android客户端在某个固定端口监听,服务器向这个端口发送定位数据)。二是,android客户端两个socket都是以客户端的身份和服务器进行通信。第一种实现发送是不容易实现的,主要基于两点:一是android手机所在外网的ip地址不好获取,网上比较可行的解决方案是android手机通过连接第三方服务器,第三方服务器在把android手机的外网ip返回回来。(我不是很喜欢这种方式)。二是android手机的socket所监听的端口号不能自己手动固定,也就是说socket监听的端口号自己设置不了,这就造成了服务器接收到定位信息后不知道向手机的哪个端口发送。因此,我使用第二个方式用so

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值