UDP编程-实现简单的即时通讯

一边接收消息,一边发送消息:需要用到多线程
接收线程用于监控对方发送的消息
发送线程用于向对方发送消息

接收

**
 * 接收端:使用面向对象封装
 *
 */
public class TalkReceive implements Runnable{
	
	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();
		}
	}
	@Override
	public void run() {
		while (true) {
			byte[] datas = new byte[1024 * 2];
			DatagramPacket packet = new DatagramPacket(datas, 0, datas.length);
			try {
				server.receive(packet);
				datas = packet.getData();
				int len=packet.getLength();
				String msg = new String(datas,0,len);
				System.out.println(from+"说:"+msg);
				if(msg.equals("bye")) {
					break;
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		server.close();
	}
}

**

  • 接收端:使用面向对象封装

*/
public class TalkReceive implements Runnable{

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();
	}
}
@Override
public void run() {
	while (true) {
		byte[] datas = new byte[1024 * 2];
		DatagramPacket packet = new DatagramPacket(datas, 0, datas.length);
		try {
			server.receive(packet);
			datas = packet.getData();
			int len=packet.getLength();
			String msg = new String(datas,0,len);
			System.out.println(from+"说:"+msg);
			if(msg.equals("bye")) {
				break;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	server.close();
}

}
发送

/**
 * 发送端:使用面向对象封装
 * @author yinqq
 *
 */
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) {
		try {
			client=new DatagramSocket(port);
			reader=new BufferedReader(new InputStreamReader(System.in));
			this.toIP=toIP;
			this.toPort=toPort;
		} catch (SocketException e) {
			e.printStackTrace();
		}
	}
	@Override
	public void run() {
		while(true) {
			String data;
			try {
				data = reader.readLine();
//				Scanner scanner=new Scanner(System.in);
//				scanner.nextLine();
				byte[] datas=data.getBytes();
				
				DatagramPacket packet=new DatagramPacket(datas,0,datas.length,new InetSocketAddress(this.toIP,this.toPort));
				client.send(packet);
//				System.out.println(data);
				if(data.equals("bye")) {
					break;
				}
			} catch (IOException e) {
				e.printStackTrace();
			}

		}
		client.close();
		
	}

}

你可能感兴趣的:(#,网路编程)