Java UDP聊天

package p3.chat;

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

import javax.xml.crypto.Data;

public class ChatDemo {

	public static void main(String[] args) throws SocketException {
		DatagramSocket send=new DatagramSocket(1000);
		DatagramSocket rece=new DatagramSocket(10001);
		new Thread(new Send(send)).start();
		new Thread(new Rece(rece)).start();
	}

}


package p3.chat;

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

public class Rece implements Runnable {
	private DatagramSocket ds;
	public Rece(DatagramSocket ds) {
		this.ds=ds;
	}
	@Override
	public void run() {
		try {
			while(true) {
			byte[] buf=new byte[1024];
			DatagramPacket dp=new DatagramPacket(buf,buf.length);
			
			//3 使用receive方法将数据存的数据包中
			
			ds.receive(dp);//阻塞式  还没收到数据 所以在等待
			
			//4 通过数据包对象的方法,解析其中的数据 比如地址 端口 数据内容
			String ip=dp.getAddress().getHostAddress();
			int port=dp.getPort();//端口(发送端)
			
			dp.getData();//数据
			
			String text=new String(dp.getData(), 0, dp.getLength());
			System.out.println(ip+":"+port+":"+text);
			if(text.equals("886")) {
				System.out.println(ip+"....退出聊天室");
			}
			
			} 
			} catch (Exception e) {
		}

	}

}

package p3.chat;

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

public class Send implements Runnable {

	private DatagramSocket ds;
	public Send(DatagramSocket ds) {
		this.ds=ds;
	} 
	@Override
	public void run() {
		try {

			BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));
			String line=null;
			while((line=bfr.readLine())!=null) {
				byte[]buf=line.getBytes();
				DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("10.194.43.59"),10001);//只要接收端端口是10000不管发送端端口是多少都能接受
				
				ds.send(dp);
				if("886".equals(line))
					break;	
			}
			ds.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}



}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值