使用UDP协议实现老师和学生的聊天(Java)

这是一个Java实现的UDP通信示例,包括学生端和老师端代码。双方通过指定端口进行交互,实现双向通信。学生端发送消息到老师端,并接收老师的回复;老师端接收学生消息并回应,当接收到'bye'时,双方结束通信。
摘要由CSDN通过智能技术生成
package com.ln.practice;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
//实现老师和学生的双向通信
//主线:输入的内容转换为字节数组的形式
public class Student {
	
	public static void main(String[] args) throws IOException {
		//创建对象,此处需要指明端口,因为我要实现双方的通信,有发送有接收
		//如果只发送,就不需要写端口值。
		DatagramSocket socket =  new DatagramSocket(8000);
		System.out.println("学生端");
		//构造方法里面有字节数组,所以需要提前准备字节数组
		while(true) {
			byte[] buf = new byte[1024];
			//输入内容
			Scanner sc = new Scanner(System.in);
			String input = sc.nextLine();
			//把输入的内容转换为字节数组
			buf = input.getBytes();
			//udp协议是通过数据包来发送数据的,所以要创建数据包对象,把输入的内容打包
			DatagramPacket packet = new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"),9000);
			//发送
			socket.send(packet);
			//如果发送bye,跳出循环
			if(input.equals("bye")) {
				break;
			}
			//接收老师的信息
			//准备字节数组
			byte[] data = new byte[1024];
			//创建数据包对象
			DatagramPacket packet1 = new DatagramPacket(data, data.length);
			//接收数据
			socket.receive(packet1);
			//分析数据
			byte[] result = packet1.getData();
			//转换成字符串
			String print_str = new String(result);
			System.out.println("老师说"+print_str);
		}
		
		//关闭流
		socket.close();
		
	}

}

以上是学生端代码,具体流程可参考注释

以下是老师端代码,具体流程可参考注释

package com.ln.practice;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;

public class Teacher {
	public static void main(String[] args) throws IOException {
		//创建对象,此处需要指明端口,因为我要实现双方的通信,有接收有发送
		DatagramSocket socket = new DatagramSocket(9000);
		System.out.println("老师端");
		while(true) {
			//接收学生的信息
			//准备字节数组
			byte[] data = new byte[1024];
			//创建数据包对象
			DatagramPacket packet1 = new DatagramPacket(data, data.length);
			//接收数据
			socket.receive(packet1);
			//分析数据
			byte[] result = packet1.getData();
			//转换成字符串
			String print_str = new String(result);
			System.out.println("学生说"+print_str);
			//如果发送bye,跳出循环
			if(print_str.startsWith("bye")) {
				break;
			}
			//发送数据
			Scanner sc = new Scanner(System.in);
			String input = sc.nextLine();
			//把输入的内容转换为字节数组
			byte[] buf = input.getBytes();
			//udp协议是通过数据包来发送数据的,所以要创建数据包对象,把输入的内容打包
			DatagramPacket packet = new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"),8000);
			//发送
			socket.send(packet);
			
		}
		//关闭流
		socket.close();
	}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值