zoukankan      html  css  js  c++  java
  • Java中UDP协议的基本原理和简单用法

       UDP协议是非面向连接的,相对于TCP协议效率较高,但是不安全。UDP协议类似发信息的过程,不管接收方是在线还是关机状态,都会把信息发送出去。但是如果接收方不处于接收信息的状态,发送出去的数据包就会丢失。

    convert()方法是用来转换字节数组和基本类型。

    /**
     * 创建基于udp协议的服务接受端
     * @author wxisme
     *
     */
    
    public class MyServer {
    
    	public static void main(String[] args) throws IOException {
    		//创建服务端端口
    		DatagramSocket server = new DatagramSocket(9898);
    		//准备接受数据的容器
    		byte[] container = new byte[1024];
    		//把数据封装成包
    		DatagramPacket packet = new DatagramPacket(container, container.length);
    		//接收数据
    		server.receive(packet);
    		//分析数据
    		//byte[] data = packet.getData();
    		double data = convert(packet.getData());
    		int len = packet.getLength();
    		//System.out.println(new String(data, 0, len));
    		System.out.println(data);
    		//释放资源
    		server.close();
    	}
    	/**
    	 * 转换为基本类型
    	 * @param data
    	 * @return
    	 * @throws IOException 
    	 */
    	public static double convert(byte[] data) throws IOException {
    		DataInputStream dis = new DataInputStream(
    				new ByteArrayInputStream(data));
    		double num = dis.readDouble();
    		return num;
    		
    	}
    
    }
    
    /**
     * 创建基于udp协议的客户发送数据端
     * @author wxisme
     */
    
    public class MyClient {
    
    	public static void main(String[] args) throws IOException {
    		//创建服务端端口
    		DatagramSocket client = new DatagramSocket(6868);
    		//准备数据
    		//String str = "UDP Protocol";
    		double num = 216.35;
    		//byte[] data = str.getBytes();
    		byte[] data = convert(num);
    		//数据打包
    		DatagramPacket packet = new DatagramPacket(
    				data, data.length, new InetSocketAddress("localhost", 9898));
    		//发送数据
    		client.send(packet);
    		//关闭资源
    		client.close();
    		System.exit(0);
    	}
    	
    	/**
    	 * 将基本类型转换成字节数组
    	 * @param num
    	 * @return
    	 * @throws IOException 
    	 */
    	public static byte[] convert(double num) throws IOException {
    		byte[] data = null;
    		ByteArrayOutputStream bos = new ByteArrayOutputStream();
    		DataOutputStream dos = new DataOutputStream(bos);
    		dos.writeDouble(num);
    		dos.flush();
    		
    		data = bos.toByteArray();
    		dos.close();
    		
    		return data;
    		
    	}
    
    }
    
  • 相关阅读:
    android的布局xml文件如何添加注释?
    安卓xml布局中 android:paddingBottom="@dimen/activity_vertical_margin"是什么意思?
    Failure [INSTALL_FAILED_OLDER_SDK]
    安装并使用PICT,生成测试用例
    安装并使用Junit
    SourceMonitor的安装
    FindBugs
    pdm的说明
    Checkstyle的安装与使用
    白话决策树
  • 原文地址:https://www.cnblogs.com/wxisme/p/4393734.html
Copyright © 2011-2022 走看看