java UDP通信

UDP:以数据为中心   非面向连接  不安全 数据可能丢失  效率高
一、类 DatagramSocket DatagramPacket
1、客户端:
   1)、创建客户端   DatagramSocket  类  +指定端口
   2)、准备数据  字节数组
   3)、打包  DatagramPacket +服务器地址 及端口
   4)、发送(服务器没打开,客户端也可以发送,不会报错,数据丢失)
   5)、释放资源


2、服务器端:
   1)、创建 服务端  DatagramSocket  类  +指定端口
   2)、准备接受容器 字节数组  封装 DatagramPacket 
   3)、包 接受数据
   4)、分析
   5)、释放资源

// Client端:
package com.bjsxt.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;

/**
 * 客户端
 * 1、创建客户端 +端口
 * 2、准备数据   double -->字节数组   字节数组输出流
 * 3、打包(发送的地点 及端口)
 * 4、发送
 * 5、释放
 * 
 * 
 * @author Administrator
 *
 */
public class Client {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		//1、创建客户端 +端口
		DatagramSocket client = new DatagramSocket(6666);
		//2、准备数据
		double num =89.12;
		byte[] data =convert(num);
		//3、打包(发送的地点 及端口) DatagramPacket(byte[] buf, int length, InetAddress 

address, int port)
		DatagramPacket packet = new DatagramPacket(data,data.length,new InetSocketAddress

("localhost",8888));
		//4、发送
		client.send(packet);
		//5、释放
		client.close();
		
	}
	
	/**
	 * 字节数组 数据源  +Data 输出流
	 * @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;
		
	}
}


//Server端
package com.bjsxt.net.udp;

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

/**
 * 服务端
 * 1、创建服务端 +端口
 * 2、准备接受容器
 * 3、封装成 包
 * 4、接受数据
 * 5、分析数据 字节数组-->double
 * 6、释放
 * @author Administrator
 *
 */
public class Server {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		//1、创建服务端 +端口
		DatagramSocket server = new DatagramSocket(8888);
		//2、准备接受容器
		byte[] container = new byte[1024];
		//3、封装成 包 DatagramPacket(byte[] buf, int length) 		
		DatagramPacket packet =new DatagramPacket(container, container.length) ;
		//4、接受数据
		server.receive(packet);
		//5、分析数据
		double data =convert(packet.getData());
		System.out.println(data);
		//6、释放
		server.close();
		
	}
	/**
	 * 字节数组 +Data 输入流
	 * @param data
	 * @return
	 * @throws IOException 
	 */
	public static double convert(byte[] data) throws IOException{
		DataInputStream dis =new DataInputStream(new ByteArrayInputStream(data));
		double num =dis.readDouble();
		dis.close();
		return num;
	}
}

package com.bjsxt.net.udp;

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

/**
 * 客户端
 * 1、创建客户端 +端口
 * 2、准备数据
 * 3、打包(发送的地点 及端口)
 * 4、发送
 * 5、释放
 * 
 * 思考: 89.12  数据+类型
 * @author Administrator
 *
 */
public class MyClient {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		//1、创建客户端 +端口
		DatagramSocket client = new DatagramSocket(6666);
		//2、准备数据
		String msg ="udp编程";
		byte[] data =msg.getBytes();
		//3、打包(发送的地点 及端口) DatagramPacket(byte[] buf, int length, InetAddress address, int port)
		DatagramPacket packet = new DatagramPacket(data,data.length,new InetSocketAddress("localhost",8888));
		//4、发送
		client.send(packet);
		//5、释放
		client.close();
		
	}

}

package com.bjsxt.net.udp;

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

/**
 * 服务端
 * 1、创建服务端 +端口
 * 2、准备接受容器
 * 3、封装成 包
 * 4、接受数据
 * 5、分析数据  
 * 6、释放
 * @author Administrator
 *
 */
public class MyServer {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		//1、创建服务端 +端口
		DatagramSocket server = new DatagramSocket(8888);
		//2、准备接受容器
		byte[] container = new byte[1024];
		//3、封装成 包 DatagramPacket(byte[] buf, int length) 		
		DatagramPacket packet =new DatagramPacket(container, container.length) ;
		//4、接受数据
		server.receive(packet);
		//5、分析数据
		byte[] data =packet.getData();
		int len =packet.getLength();
		System.out.println(new String(data,0,len));
		//6、释放
		server.close();
		
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值