我是靠谱客的博主 直率热狗,最近开发中收集的这篇文章主要介绍Android的UDP请求与响应Android的UDP请求与响应(DatagramSocket),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Android的UDP请求与响应(DatagramSocket)
我们在android网络里面可能用的最多的TCP协议,但是我们都知道其实除了TCP之外还有一个兄弟就是UDP。UDP是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
- DatagramSocket的间谍使用
- 请求一个服务器并发送数据
- 解析服务器返回的数据
需求
一个小Demo
向服务器发送一个数据包,然后服务器校验后会返回一个结果。
分析
以前我们向TCP协议的发送数据是通过Socket+IO流来完成的,但是现在已经不是TCP协议了,怎么办呢?我仔细一找,原来Socket还有一个兄弟叫DatagramSocket。知道了这个,我们就好办了。由于受面向对象思想的影响,这里我将这个请求与响应封装成了个对象,下次哪里要用直接实例化这个就行。
关键代码
封装类:
public class UDPXutil {
private byte[] buffer = new byte[1024];
private DatagramSocket ds = null;
/**
* 构造函数,创建UDP客户端
* @throws Exception
*/
public UDPXutil() throws Exception {
ds = new DatagramSocket();
}
/**
* 设置超时时间,该方法必须在bind方法之后使用.
* @param timeout 超时时间
* @throws Exception
*/
public final void setSoTimeout(final int timeout) throws Exception {
ds.setSoTimeout(timeout);
}
/**
* 获得超时时间.
* @return 返回超时时间
* @throws Exception
*/
public final int getSoTimeout() throws Exception {
return ds.getSoTimeout();
}
public final DatagramSocket getSocket() {
return ds;
}
/**
* 向指定的服务端发送数据信息.
* @param host 服务器主机地址
* @param port 服务端端口
* @param bytes 发送的数据信息
* @return 返回构造后俄数据报
* @throws IOException
*/
public final DatagramPacket send(final String host, final int port,
final byte[] bytes) throws IOException {
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress
.getByName(host), port);
ds.send(dp);
return dp;
}
/**
* 接收从指定的服务端发回的数据.
* @param lhost 服务端主机
* @param lport 服务端端口
* @return 返回从指定的服务端发回的数据.
* @throws Exception
*/
public final String receive(final String lhost, final int lport)
throws Exception {
DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
ds.receive(dp);
String info = new String(dp.getData(), 0, dp.getLength());
return info;
}
/**
* 关闭udp连接.
*/
public final void close() {
try {
ds.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
好了,既然封装好了,那我们就去用吧!这里是通过点击Button来进行请求,返回的结果,我就直接用log日志打印出来。
public class MainActivity extends AppCompatActivity {
private Button sub_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
sub_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new HttpThread().start();
}
});
}
private void initViews() {
sub_btn = (Button) findViewById(R.id.id_submint);
}
//android里面网络请求得在线程里面执行
class HttpThread extends Thread {
@Override
public void run() {
super.run();
try {
//数据包内容,我这里是用的二进制
byte[] b = new byte[8];
b[0] = (byte) 0x69;
b[1] = (byte) 0x70;
b[2] = (byte) 0xff;
b[3] = (byte) 0xff;
b[4] = (byte) 0xff;
b[5] = (byte) 0xff;
b[6] = (byte) 0xff;
b[7] = (byte) 0xff;
UDPXutil udpXutil=new UDPXutil();
String serverHost = "255.255.255.255";
//设置端口号
int serverPort = 9982;
udpXutil.send(serverHost, serverPort, b);
//接收返回的结果
String info = udpXutil.receive(serverHost, serverPort);
Log.i("dandy",info);
udpXutil.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
最后记得在配置文件里面设置网络权限
<uses-permission android:name="android.permission.INTERNET"/>
最后
以上就是直率热狗为你收集整理的Android的UDP请求与响应Android的UDP请求与响应(DatagramSocket)的全部内容,希望文章能够帮你解决Android的UDP请求与响应Android的UDP请求与响应(DatagramSocket)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复