java_network programming_UDP case: online consultation (two-way)

 step one:

/**
 * Package as a sender
 * 1. Use DatagramSocket to specify the port to create a sender
 * 2. Be sure to convert to a byte array
 * 3. Package into a DatagramPacket package
 * 4. send(DatagramPacket)
 * 5. Release resources
 * @author ZD.zhang
 *
 */

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;


public class TalkSend implements Runnable{
	private DatagramSocket client;
	private BufferedReader reader;
	private String toIP;
	private int toPort;
	public TalkSend(int port,String toIP,int toPort) {
		this.toIP = toIP;
		this.toPort = toPort;
		try {
			client = new DatagramSocket(port);
			//2.一定转成字节数组
			 reader = new BufferedReader(new InputStreamReader(System.in));
		} catch (SocketException e) {
			e.printStackTrace();
		}
	}
	@Override
	public void run() {
		while(true) {
			try {
				String data = reader.readLine();
				byte[] datas = data.getBytes();
				//3.包装成DatagramPacket包裹
				DatagramPacket packet = new DatagramPacket(datas,0,datas.length,
						new InetSocketAddress(toIP, toPort));
				//4.send(DatagramPacket)
				client.send(packet);
				if(data.equals("bye")) {
					break;
				}
			} catch (IOException e) {
				e.printStackTrace();
			}	
		}
		//5.释放资源
		client.close();
	}
}

Step 2: 

/**
 *Encapsulate the receiving end
 *1. Use DatagramSocket to specify the port to create the receiving end
 *2. Encapsulate into a DatagramSocket package
 *3.receive(DatagramSocket)
 *4. Analyze the data
 *byte[] getData()
 * getLength()
 *5. Release resources
 * @author ZD.zhang
 *
 */

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


public class TalkReceive implements Runnable{
	//1.使用DatagramSocket 指定端口 创建接收端
	private DatagramSocket server;
	private String from;
	public TalkReceive(int port,String from) {
		this.from = from;
		try {
			server = new DatagramSocket(port);
		} catch (SocketException e) {
			e.printStackTrace();
		}
	}
	public void run() {
		while(true){
			//2.封装成DatagramSocket包裹
			byte[] container = new byte[1024*60];
			DatagramPacket packet = new DatagramPacket(container,0,container.length);
			//3.receive(DatagramSocket)
			try {
				server.receive(packet); //阻塞式接收
				//4.分析数据
				byte[] datas = packet.getData();
				int len = packet.getLength();
				String data = new String(datas,0,len);
				System.out.println(from+":"+data);
				if(data.equals("bye")) {
					break;
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		//5.释放资源
		server.close();
	}
}
public class TalkStudent {
	public static void main(String[] args) {
		new Thread(new TalkSend(8888,"localhost",6666)).start();  //发送
		new Thread(new TalkReceive(7777,"老师")).start(); //接受
	}
}
public class TalkTeacher {
	public static void main(String[] args) {
		new Thread(new TalkReceive(6666,"学生")).start(); //接受
		new Thread(new TalkSend(9999,"localhost",7777)).start();
	}
}

Guess you like

Origin blog.csdn.net/weixin_46083166/article/details/105824779