天天看点

Android开发--Udp方式的数据传输

这是我第一次写博客,以前遇到技术上的困难总是查找很长时间的资料,好不容易解决后却没能将之记录下来。今后我将会把自己解决的一个个小问题记录在此,与大家分享学习心得,本人入行尚浅望各位大牛批评指正!

这篇博文,主要是总结了前段时间刚解决的Android开发中,Upd方式的数据传输的实现,好了,废话不多说。

一、要使用Udp传输就必须先在Android工程下的AndroidMainfest里添加用户的权限,代码如下:

        <uses-permissionandroid:name="android.permission.INTERNET" />

二、在添加完权限之后,就开始我们的程序的编写,首先是发送程序:

DatagramSocket ds = new DatagramSocket(8001);//创建一个DatagramSocket对象,并指定一个端口号

String SendData = "要发送的数据";//传递要发送的数据

byte[] bstr = SendData.getBytes();//将发送数据转换成二进制数组

DatagramPacket dp =newDatagramPacket(bstr,bstr.length,InetAddress.getByName("192.168.1.103"),10333);//新建一个DatagramPacket对象,将目标IP地址和端口号修改成//你要发送的目标地址及端口号

ds.send(dp);//发送数据包

ds.close();

三、写完发送程序紧接着来写接收程序,代码如下:

DatagramSocketds = new DatagramSocket(8001);//创建一个DatagramSocket对象,并指定一个端口号

while(true)//用一个循环来接收数据包

                 {

                 byte[]buf = new byte[1024]; //开辟一个二进制数组用于存储数据。

                 DatagramPacket dp = new DatagramPacket(buf,buf.length);//创建一个长度为buf.length的数据包

                 try{

                      ds.receive(dp);//阻塞式方法。通过服务的receive方法将收到数据存入数据包中。

                      if(dp!=null){

                            String ip = dp.getAddress().getHostAddress();

                            String data = new String(dp.getData(),0,dp.getLength());

                      }

                 }

                 catch(Exception e){  

 e.printStackTrace();

                 }

                 //4,通过数据包的方法获取其中的数据。

                 finally{

;//可自行添加

                 }

           }

四、在写完接收程序后,你会发现程序一旦运行就会一直卡在那好像死机了一样,原因是ds.receive(dp);是一个阻塞式的方法,程序会一直等在那,如果用主线程来接收,这无疑会使得程序卡在那,所以我们的接收程序都应该在写在子线程里,而线程间的数据传输就要通过Handler/Message对象来实现。

五、我们一般都希望接收和发送使用同一个端口,所以我可以将DatagramSocket 对象设置为全局变量,记得自行添加try,catch语句哦~

希望这篇博文能给初学者们一点小小的帮助

Android开发--Udp方式的数据传输

继续阅读