欢迎光临散文网 会员登陆 & 注册

UDP实现实时聊天

2021-02-15 10:18 作者:忘魂儿  | 我要投稿

package com.studying.JavaNet.Chat;

import java.io.BufferedReader;
import java.io.IOException;
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{
   DatagramSocket datagramSocket=null;
   BufferedReader bufferedReader=null;
   private int toPort;//对方的ip和端口号
   private String toIP;
   private int fromPort;

   public TalkSend(int toPort, String toIP, int fromPort) {
       this.toPort = toPort;
       this.toIP = toIP;
       this.fromPort = fromPort;
       try {
           datagramSocket = new DatagramSocket(fromPort);
           bufferedReader = new BufferedReader(new InputStreamReader(System.in));

       } catch (SocketException e) {
           e.printStackTrace();
       }

   }

   @Override
   public void run() {
       while(true)//循环发送
       {
           try {
               String data = bufferedReader.readLine();
               byte[] datainf = data.getBytes();
               DatagramPacket datagramPacket = new DatagramPacket(datainf,0,datainf.length,new InetSocketAddress(this.toIP,this.toPort));
               datagramSocket.send(datagramPacket);
               if (data.equals("bye"))
               {
                   break;
               }
           } catch (IOException e) {
               e.printStackTrace();
           }
       }

       datagramSocket.close();
   }
}

package com.studying.JavaNet.Chat;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class TalkReceive implements Runnable{
   DatagramSocket datagramSocket=null;
   private int port;
   private String msgFrom;
   public TalkReceive(int port,String msgFrom) {
       this.port = port;
       this.msgFrom=msgFrom;
       try {
           datagramSocket = new DatagramSocket(port);
       } catch (SocketException e) {
           e.printStackTrace();
       }
   }

   @Override
   public void run() {


       while(true)
       {
           try {
               byte[] container = new byte[1024];//接收
               DatagramPacket datagramPacket = new DatagramPacket(container,0,container.length);
               datagramSocket.receive(datagramPacket);//阻塞式接收包裹
               //断开
               byte[] data = datagramPacket.getData();
               String recdata= new String(data, 0, data.length);
               System.out.println(msgFrom+":"+recdata);
               if (recdata.equals("leaving"))
               {
                   break;
               }
           } catch (IOException e) {
               e.printStackTrace();
           }

       }
       datagramSocket.close();
   }
}

package com.studying.JavaNet.Chat;

public class TalkUserone {
   public static void main(String[] args) {
       //开启两个线程
       new Thread(new TalkSend(22,"localhost",33)).start();//设立自己的发送端口和到达端口
       new Thread(new TalkReceive(2233,"UserOne")).start();//设立自己的接收端口
   }
}

package com.studying.JavaNet.Chat;

public class TalkUserOther {
   public static void main(String[] args) {
           new Thread(new TalkSend(2233,"localhost",1215)).start();
           new Thread(new TalkReceive(22,"UserTwo")).start();
   }
}
//师从狂神,仅供学习使用,未经允许不得转载

UDP实现实时聊天的评论 (共 条)

分享到微博请遵守国家法律