网络通信 Datagram 实现UDP

 转载请注明出处:https://blog.csdn.net/mr_leixiansheng/article/details/78225669


UdpServer

1、创建DatagramSocket,指定端口号

 2、创建DatagramPacket,接收客户端发送的数据

 3、接收客户端数据

 4、读取数据

 5、服务器反馈

UdpClient

1、定义发送信息、地址、端口

2、创建DatagramPacket ,包含要发送的信息

 3、创建DatagramSocket

4、发送数据

5、客户端接收数据

UdpServer

package com.leixiansheng;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/**
 * 
 * @author leixiansheng
 *服务器  基于UDP信息
 */
public class UdpService {
	
	public static void main(String[] args) {
		try {
			/**
			 * 服务器接收
			 */
			//1、创建DatagramSocket,指定端口号
			DatagramSocket socket = new DatagramSocket(8800);
			//2、创建DatagramPacket,接收客户端发送的数据
			byte[] data = new byte[1024];//指定接收的数据包大小
			DatagramPacket packet = new DatagramPacket(data, 0, data.length);
			System.out.println("***服务器启动成功,等待客户端***");
			//3、接收客户端数据
			socket.receive(packet); //阻塞在此
			//4、读取数据
			String content = new String(data, 0, packet.getLength());
			System.out.println("我是服务器,客户端内容是:"+content);
			
			/**
			 * 服务器反馈
			 */
			//1、定义发送信息
			InetAddress address = packet.getAddress();
			int port = packet.getPort();
			byte[] data2 = "欢迎登录".getBytes();
			//2、
			DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
			//3、发送数据
			socket.send(packet2);
			//4、关闭资源
			socket.close();
			
//			udpThread(socket);  //UDP多线程
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private static void udpThread(DatagramSocket socket) {
		System.out.println("***服务器启动成功,等待客户端***");
		int num=0;
		while(true){
			try {
				//2、创建DatagramPacket,接收客户端发送的数据
				byte[] data = new byte[1024];//指定接收的数据包大小
				DatagramPacket packet = new DatagramPacket(data, 0, data.length);
				//3、接收客户端数据
				socket.receive(packet); //阻塞在此
				UdpThread udpThread = new UdpThread(socket,packet,data);
				udpThread.setPriority(4);
				udpThread.start();
				num++;
				System.out.println("客户端数量:"+num);
			} catch (IOException e) {
				e.printStackTrace();
			} //阻塞在此
		}
	}

}
UdpClient

package com.leixiansheng;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
/**
 * 
 * @author leixiansheng
 *客户端
 */
public class UdpClient {

	public static void main(String[] args) {
		try {
			/**
			 * 客户端发送数据
			 */
			//1、定义发送信息、地址、端口
			InetAddress address = InetAddress.getByName("localhost");
			int port = 8800;
			byte[] data = "我要登录".getBytes();
			//2、创建DatagramPacket ,包含要发送的信息
			DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
			//3、创建DatagramSocket
			DatagramSocket socket = new DatagramSocket();
			//4、发送数据
			socket.send(packet);
			
			/**
			 * 客户端接收数据
			 */
			byte[] data2 = new byte[1024];
			DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
			socket.receive(packet2);
			String content = new String(data2, 0, packet2.getLength());
			System.out.println("我是客户端,服务器内容是:"+content);
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}
UdpThread
package com.leixiansheng;

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

public class UdpThread extends Thread {
	DatagramSocket socket;
	DatagramPacket packet;
	byte[] data;
	
	public UdpThread(DatagramSocket socket,DatagramPacket packet,byte[] data) {
		this.socket = socket;
		this.packet = packet;
		this.data = data;
	}

	@Override
	public void run() {
	
		try {
			//4、读取数据
			String content = new String(data, 0, packet.getLength());
			System.out.println("我是服务器,客户端内容是:"+content);
			
			/**
			 * 服务器反馈
			 */
			//1、定义发送信息
			InetAddress address = packet.getAddress();
			int port = packet.getPort();
			byte[] data2 = "欢迎登录".getBytes();
			//2、
			DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
			//3、发送数据
			socket.send(packet2);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

猜你喜欢

转载自blog.csdn.net/mr_leixiansheng/article/details/78225669