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();

	}

}

运行效果截图:
在这里插入图片描述

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: UDP服务器自动回复是指服务器在接收到UDP数据包时,自动向发送方发送一个回复数据包的过程。这种机制通常用于网络通信中的一对一通信,其中服务器起到应答的作用。 UDP协议是一种无连接的协议,不具有可靠性和有序性。因此,在使用UDP进行通信时,服务器并不关心发送方是否已接收到数据包。但是,在某些情况下,为了确认通信是否成功,服务器可能需要对发送方进行回复。 服务器自动回复的过程一般如下: 1. 服务器监听指定的UDP端口,等待接收来自发送方的数据包。 2. 一旦服务器接收到数据包,它会解析数据包中的内容,确定需要回复的内容。 3. 服务器创建一个回复数据包,并将需要发送的内容填入数据包中。 4. 服务器将回复数据包发送给发送方的IP地址和端口号。 5. 发送方接收到服务器的回复数据包后,可以根据需要进行进一步的操作。 服务器自动回复的应用场景举例: 1. 服务器通过接收到的请求数据包进行处理,并将处理结果回复给发送方,以确认请求已收到。 2. 服务器对特定的事件作出响应,例如游戏服务器向客户端发送确认消息。 3. 服务器根据接收到的数据包内容进行路由选择,将回复数据包发送给正确的发送方。 总之,UDP服务器的自动回复是一种通信机制,通过将回复信息发送给发送方,来实现服务器与发送方之间的一对一通信。这种机制在许多网络应用中都得到了广泛的应用。 ### 回答2: UDP服务器自动回复是指当UDP服务器接收到UDP请求时,自动给客户端发送响应的功能。 实现UDP服务器自动回复的步骤如下: 1. 创建UDP服务器程序:使用编程语言如Python、Java等创建UDP服务器程序。 2. 绑定服务器端口:将服务器程序绑定到一个特定的端口上,以便能够接收来自客户端的UDP请求。 3. 接收UDP请求:使用服务器程序监听服务器绑定的端口,当服务器接收到UDP请求时,会触发一个事件。 4. 解析UDP请求:服务器程序需要解析收到的UDP请求,获取其中的数据信息。 5. 处理业务逻辑:根据UDP请求的数据信息,服务器程序执行相应的业务逻辑。例如,查询数据库、计算结果等。 6. 构造UDP响应:服务器程序根据处理的结果,构造一个UDP响应消息。 7. 发送UDP响应:使用服务器端套接字,将UDP响应消息发送给请求的客户端。 8. 完成回复:服务器程序将UDP响应消息发送给客户端后,任务完成。 需要注意的是,UDP是一种面向无连接的传输协议,它不保证数据的可靠传输。因此,在UDP服务器自动回复时,需要考虑是否需要进行数据校验、重传等处理,以确保数据的完整性和正确性。 另外,UDP服务器自动回复还需要考虑并发性和可扩展性的问题,以便能够同时处理多个UDP请求,并能够适应日益增长的用户数量。 ### 回答3: UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议,通常用于需要高速传输和实时性的应用程序。UDP Server是基于UDP协议实现的服务器端程序,其功能是接收和处理UDP数据包。 UDP Server自动回复是指当UDP Server接收到客户端发送的请求或数据包时,自动给客户端发送响应或回复。这种回复可以是提供某种服务、确认接收或简单回复。 实现UDP Server自动回复的一种常见场景是基于Echo服务器。Echo服务器接收到任何发送到它的数据,并将其原样返回给发送方。这种回复可以用于测试网络通信是否正常,或者简单的确认请求已经收到。 在实现UDP Server自动回复时,首先需要创建一个UDP Socket,绑定到指定的IP地址和端口号上。然后使用一个循环不断地接收客户端发送的请求或数据包。当有数据包到达时,UDP Server会自动从Socket中读取数据,并对数据进行处理。处理的方式根据具体场景而定,可以是简单回复或者根据请求进行相应的业务逻辑处理。处理完成后,UDP Server会将响应数据打包成数据包,并通过Socket发送给客户端。 需要注意的是,由于UDP协议的特性是无连接和不可靠,因此在实现自动回复时可能需要考虑数据包的丢失和乱序的情况。在这种情况下,可以采取一些措施来增加数据传输的可靠性,例如使用超时重传机制和校验和等。 总之,UDP Server自动回复是一种基于UDP协议的服务器端程序,在接收到客户端发送的请求或数据包后,自动给客户端发送相应的回复。通过这种方式,可以实现简单的通信确认、测试和一些简单的服务提供。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值