java中UDP实例代码

版权声明:本篇文章由IT_CREATE整理 https://blog.csdn.net/IT_CREATE/article/details/83374749

第一部分代码传输字符数据

客户端部分

package com.work.net.udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

/**
 * 客户端
 * @author Administrator
 *
 */
public class MyClient {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建客户端  + 端口 (指定:我的数据从哪个端口出去)
		DatagramSocket client = null;
		DatagramPacket packet = null;
		byte[] data = null;
		try {
			client = new DatagramSocket(6666);
			//准备数据
			String msg = "记得带好一点的酒哦!!!";
			data = msg.getBytes();
			//将数据打包 DatagramPacket + 服务器地址及端口号 来完成打包
			packet = new DatagramPacket(data, data.length, new InetSocketAddress("127.0.0.1", 8888));
			//发送
			client.send(packet);
			//释放资源
			client.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
	}

}

服务器部分

package com.work.net.udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * 服务器端
 * @author Administrator
 *
 */
public class MyServer {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建服务端 DatagramSocket类 + 端口(指定:我从哪个端口获取数据)
		DatagramSocket server = null;
		try {
			server = new DatagramSocket(8888);
			//准备接收数据 同样需要定义一个字节数组 work
			byte[] container = new byte[1024];
			DatagramPacket packet = new DatagramPacket(container, container.length);
			while(true) {
				//接收数据
				server.receive(packet);//阻塞方法
				//分析数据
				byte[] data = packet.getData();//获得客户端传输的真实数据
				System.out.println(new String(data));
			}
			
			//释放资源
			//server.close();
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

第一部分代码传输double类型数据

客户端部分

package com.work.net.udp;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

/**
 * UDP客户端
 * 
 * @author Administrator
 *
 */
public class MyClient02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 创建客户端 + 端口 (指定:我的数据从哪个端口出去)
		DatagramSocket client = null;
		DatagramPacket packet = null;
		byte[] data = null;
		try {
			client = new DatagramSocket(6666);
			//准备数据
			double nums = 100.55;
			data = converter(nums);//将double值转换为byte[]
			//将数据打包 DatagramPacket + 服务器地址及端口号 来完成打包
			packet = new DatagramPacket(data, data.length, new InetSocketAddress("127.0.0.1", 8888));
			//发送
			client.send(packet);
			//释放资源
			client.close();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/**
	 * 使用数据流和字节数组流,完成double到byte[]数组的转换
	 * @param nums
	 * @return
	 * @throws IOException
	 */
	private static byte[] converter(double nums) throws IOException {
		// TODO Auto-generated method stub
		byte[] data = null;
		//底层流
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		//上层流
		DataOutputStream dos = new DataOutputStream(bos);
		dos.writeDouble(nums);
		dos.flush();
		//获取数据
		data =  bos.toByteArray();//通过底层字节数组流获取字节数据
		bos.close();
		return data;
	}

}

服务器部分

package com.work.net.udp;

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * 服务器端
 * @author Administrator
 *
 */
public class MyServer02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建服务端 DatagramSocket类 + 端口(指定:我从哪个端口获取数据)
		DatagramSocket server = null;
		try {
			server = new DatagramSocket(8888);
			//准备接收数据 同样需要定义一个字节数组 封装DataGramPacket
			byte[] container = new byte[1024];
			DatagramPacket packet = new DatagramPacket(container, container.length);
			while(true) {
				//接收数据
				server.receive(packet);//阻塞方法
				//分析数据
				byte[] data = packet.getData();//获得客户端传输的真实数据
				double nums = converter(data);
				System.out.println(nums);
			}
			
			//释放资源
			//server.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	/**
	 * 使用数据流和字节数组流,完成byte[]数组到double的转换
	 * @param data
	 * @return
	 * @throws IOException 
	 */
	private static double converter(byte[] data) throws IOException {
		// TODO Auto-generated method stub
		ByteArrayInputStream bis = new ByteArrayInputStream(data);//定义底层流
		DataInputStream dis = new DataInputStream(bis);//定义上层流
		double nums = dis.readDouble();//通过上层流获取转换后的数据
		bis.close();
		return nums;
	}

}

最后其他类似,都要转成字节数组进行数据传输

猜你喜欢

转载自blog.csdn.net/IT_CREATE/article/details/83374749
今日推荐