java_网络编程_UDP案例:在线咨询(双向)

 步骤一:

/**
 * 封装成发送端
 * 1.使用DatagramSocket 指定端口 创建成发送端
 * 2.一定转成字节数组
 * 3.包装成DatagramPacket包裹
 * 4.send(DatagramPacket)
 * 5.释放资源
 * @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();
	}
}

步骤二: 

/**
 *封装接受端
 *1.使用DatagramSocket 指定端口 创建接收端
 *2.封装成DatagramSocket包裹
 *3.receive(DatagramSocket)
 *4.分析数据
 *byte[] getData()
 *         getLength()
 *5.释放资源
 * @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();
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_46083166/article/details/105824779
今日推荐