java_udp_chat聊天使用多线程

chat类:

package cn.itcast.chat.demo;

import java.net.DatagramSocket;
import java.net.SocketException;

public class ChatDemo {

	public static void main(String[] args) throws SocketException {
		DatagramSocket send=new DatagramSocket();
		DatagramSocket rece=new DatagramSocket(10001);
		
		SendDemo sd=new SendDemo(send);
		ReceDemo rd=new ReceDemo(rece);
		new Thread(rd).start();
		new Thread(sd).start();
			
	}
}

发送类:

package cn.itcast.chat.demo;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class SendDemo implements Runnable {

	private DatagramSocket ds;
	
	
	public SendDemo(DatagramSocket ds) {
		super();
		this.ds = ds;
	}
	
	@Override
	public void run() {
		
		try {
			//2、把数据放到包里
			BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
			String len=null;
			
			while((len=buf.readLine())!=null) {
				
				byte[]buff=len.getBytes();
				DatagramPacket dp=
					new DatagramPacket(buff, buff.length, InetAddress.getByName("192.168.1.255"), 10001);
				
			//3、使用udp将数据包发送出去,使用Send方法
			ds.send(dp);
			if("over".equals(len))
					break;
			}
			//4、关闭流
			ds.close();	
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
}

接受类:

package cn.itcast.chat.demo;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class ReceDemo implements Runnable {
	private DatagramSocket ds;

	public ReceDemo(DatagramSocket ds) {
		super();
		this.ds = ds;
	}

	@Override
	public void run() {
		try {
//			2、创建数据包用于存储接收到的数据
			byte[]buff=new byte[1024];
			DatagramPacket dp=new DatagramPacket(buff, buff.length);
			
			while(true) {
//			3、将数据存储到数据包中
			ds.receive(dp);
			
//			4、通过数据包中的方法,解析其中的数据,如ip地址,端口号,内容
			String ip=dp.getAddress().getHostAddress();
			int port=dp.getPort();
			String date=new String(dp.getData(), 0, dp.getLength());
			if(date.equals("over"))
				System.out.println("已退线");
	
			System.out.println(ip+":::"+port+":::"+date);	
			}
				
		} catch (Exception e) {
			
		}	
	}
}

猜你喜欢

转载自blog.csdn.net/TDOA1024/article/details/82829791