Java使用多线程,UPD通过控制台之间互相通讯

废话就不多说了,直接上demo,使用带来来进行了解

public class TaleTeceive implements  Runnable {

    DatagramSocket datagramSocket = null;
    private String msgFrom;
    public TaleTeceive(int formPort,String msgFrom) throws SocketException {
        this.datagramSocket = new DatagramSocket(formPort);
        this.msgFrom = msgFrom;
    }

    @Override
    public void run() {

        try{
            //准备接收的包裹
            byte [] bytes = new byte[1024];
            while (true){
                DatagramPacket datagramPacket = new DatagramPacket(bytes,0,bytes.length);
                datagramSocket.receive(datagramPacket);
                //断开连接
                byte [] data = datagramPacket.getData();
                String  date = new String(data,0,data.length);
                System.out.println(msgFrom+":"+date);
                if(date.trim().startsWith("bye")){
                    break;
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(datagramSocket != null)
                datagramSocket.close();
        }
    }
}
public class TalkSend implements Runnable {

    DatagramSocket datagramSocket = null;
    BufferedReader bufferedReader = null ;

    private int formPort;
    private String toIP;
    private int toPort;


    public TalkSend(int formPort,String toIP,int toPort) throws SocketException {
        this.datagramSocket =  new DatagramSocket(this.formPort);
        this.bufferedReader =  new BufferedReader(new InputStreamReader(System.in));
        this.formPort = formPort;
        this.toIP = toIP;
        this.toPort = toPort;
    }

    @Override
    public void run() {
        try{
            while (true){
                String data  = bufferedReader.readLine();
                byte [] dates = data.getBytes();
                DatagramPacket datagramPacket =  new DatagramPacket(dates,0,data.length(),new InetSocketAddress(this.toIP,this.toPort));
                datagramSocket.send(datagramPacket);
                if(data.toString().startsWith("bye")){
                    break;
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if( bufferedReader != null)
                    bufferedReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            if(datagramSocket != null)
                datagramSocket.close();
        }

    }
}

接下来就是创建线程了

public class TalkStudent {
	public static void main(String[] args) throws SocketException {
        new Thread(new TalkSend(7777,"127.0.0.1",9999)).start();
        new Thread(new TaleTeceive(8888,"老师")).start();
    }
}
 public class TalkTeacher {
	public static void main(String[] args) throws SocketException {
        new Thread(new TalkSend(5555,"127.0.0.1",8888)).start();
        new Thread(new TaleTeceive(9999,"学生")).start();
    }
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值