这是我第一次写博客,以前遇到技术上的困难总是查找很长时间的资料,好不容易解决后却没能将之记录下来。今后我将会把自己解决的一个个小问题记录在此,与大家分享学习心得,本人入行尚浅望各位大牛批评指正!
这篇博文,主要是总结了前段时间刚解决的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语句哦~
希望这篇博文能给初学者们一点小小的帮助