java网络编程(UDP)——简单的自动回复消息功能(女神自动回复SingleDog消息,可根据亲密的设置回复多少条数据)

java网络编程(UDP)——简单的自动回复消息功能(女神自动回复SingleDog消息,可根据亲密的设置回复多少条数据)

UDP是UserDatagramProtocol的简称,是一种无连接的协议
UDP是无连接型协议,因而具有资源消耗小,处理速度快的优点,我们聊天大多就是使用的UDP协议。比如接下来的相互聊天的情况:(当然只是SingleDog一人说话,女神是自动回复)

1.服务端,接收聊天数据并显示聊天数据。
public class Goddess implements Runnable {
	private static int number = 0;
	//设置回复四次
	private static int numbers = 4;

	@Override
	public void run() {
		try {
			test2();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	private static void test2() throws Exception {
	//设置端口号
		int port = 10088;
		DatagramSocket datagramSocket = new DatagramSocket(port);

		byte[] bytes = new byte[1024 * 10];
		int length = bytes.length;
		DatagramPacket datagramPacket = new DatagramPacket(bytes, length);
		datagramSocket.receive(datagramPacket);

		byte[] data = datagramPacket.getData();

		String string = new String(data);

		InetAddress address = datagramPacket.getAddress();
		String hostName = address.getHostName();
		String hostAddress = address.getHostAddress();
		//输出主机名
		System.out.println(hostName);
		//输出主机id
		System.out.println(hostAddress);
		//输出就收内容
		System.out.println(string);
		datagramSocket.close();

		//等一秒回复消息
		Thread.sleep(1000 * 1);
		test1();

	}

	private static void test1() throws Exception {

		Random random = new Random();
		String string = null;
		String[] strings = { "哦哦", "嗯嗯", "啊啊", "好的" };
		int nextInt = random.nextInt(strings.length);
		//判断是否达到了回复的最大次数
		if (number > number) {
			string = "女神回复:" + "睡觉去了,再见";
			DatagramSocket datagramSocket1 = new DatagramSocket();

			byte[] bytes = string.getBytes();
			int length = bytes.length;
			InetAddress address = InetAddress.getLocalHost();
			int port = 10089;

			DatagramPacket datagramPacket1 = new DatagramPacket(bytes, length, address, port);

			datagramSocket1.send(datagramPacket1);

			datagramSocket1.close();
		} else {
			number++;
			string = "女神回复:" + strings[nextInt];
			DatagramSocket datagramSocket1 = new DatagramSocket();

			byte[] bytes = string.getBytes();
			int length = bytes.length;
			InetAddress address = InetAddress.getLocalHost();
			int port = 10089;

			DatagramPacket datagramPacket1 = new DatagramPacket(bytes, length, address, port);

			datagramSocket1.send(datagramPacket1);

			datagramSocket1.close();
			//如果没有达到规定回复次数就继续循环调用
			test2();
		}

	}

}

2.客户端,发送数据,收到服务端的自动回复。
public class Single {

	private static int number = 0;
	//设置回复四次
	private static int numbers = 4;

	public static void main(String[] args) throws Exception {
		//先启动服务端就收数据,再启动客户端发送数据
		Goddess goddess = new Goddess();
		Thread thread = new Thread(goddess);
		thread.start();
		test2();

	}

	private static void test2() throws Exception {
		Scanner scanner = new Scanner(System.in);
		// 四次对话后就不再输入,也不再调用test1()方法进行等待接收。
		if (number < numbers) {
			number++;
			System.out.println("请身为单身狗的你输入想对女神说的话:");
			String string = scanner.next();
			System.out.println();
			DatagramSocket datagramSocket = new DatagramSocket();

			byte[] bytes = string.getBytes();
			int length = bytes.length;
			InetAddress address = InetAddress.getLocalHost();
			int port = 10088;

			DatagramPacket datagramPacket = new DatagramPacket(bytes, length, address, port);

			datagramSocket.send(datagramPacket);

			datagramSocket.close();

			// 输出消息以后马上进入等待消息的状态
			test1();
		} else {
		//对方已经拉黑您了!!!
			System.out.println("你亲爱的女神已经睡觉了,请勿打扰她睡觉");
			scanner.close();
		}

	}

	private static void test1() throws Exception {
		int port = 10089;
		DatagramSocket datagramSocket1 = new DatagramSocket(port);

		byte[] bytes = new byte[1024 * 10];
		int length = bytes.length;
		DatagramPacket datagramPacket1 = new DatagramPacket(bytes, length);
		datagramSocket1.receive(datagramPacket1);

		byte[] data = datagramPacket1.getData();

		String string = new String(data);

		InetAddress address1 = datagramPacket1.getAddress();
		String hostName = address1.getHostName();
		String hostAddress = address1.getHostAddress();

		System.out.println(hostName);
		System.out.println(hostAddress);
		System.out.println(string);
		datagramSocket1.close();
		Thread.sleep(1000 * 1);
		test2();

	}

}

运行效果截图:
java网络编程(UDP)——简单的自动回复消息功能(女神自动回复SingleDog消息,可根据亲密的设置回复多少条数据)_第1张图片

你可能感兴趣的:(java,网络)