Android的UDP请求与响应
来源:互联网 发布:什么软件可以汉化 编辑:程序博客网 时间:2024/06/18 15:56
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"/>
0 0
- Android的UDP请求与响应
- Android Http请求头与响应头的学习
- Ajax 的请求与响应
- HTTP的请求与响应
- Android Http请求头与响应头
- http协议的请求与响应
- jquery的ajax请求servlet与响应
- 请求与响应的大体流程
- 浏览器与IIS的请求处理响应
- 完整的web请求与响应
- HttpServlet类的请求与响应
- HTTP协议的请求与响应
- 一个完整的请求与响应过程
- HTTP的请求报文与响应报文
- 一次完整的 HTTP 请求与响应
- 完整的HTTP请求与响应(图解)
- 一次完整的HTTP请求与响应
- axios的拦截请求与响应
- [杂七杂八-iOS]个人总结-3.16
- Linux常用命令
- 从头认识设计模式-策略模式-03-思考过程二:在每一个类里面单独增加方法或者增加接口
- 札记——设计模式之多个工厂方法模式
- Loongson Kernel编译与使用
- Android的UDP请求与响应
- ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同
- codeforce 148->A. Insomnia cure
- 在Linux(centos)中搭建LAMP的小过程
- Hibernate
- 如何把一个包含features和plugins的folder 变成一个Maven Tycho支持的 P2仓库?
- Linux中创建别名
- 错误1error LNK2019: 无法解析的外部符号 _wWinMain@16,该符号在函数 ___tmainCRTStartup 中被引用E:\elipse demo\LTG\LTG\
- 设计模式(五)桥接模式Bridge == Pointer To Implementation