多人間UDP聊天小工具

利用UDP協議向指定的人發送數據包,並且啓用另外一個線程用於接收數據包,完成多人聊天功能

package UDPtest;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
/**
 * Created by fushuang on 2016/8/17.
 */
public class UdpChatUtil {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("請輸入對方的IP地址:");
        String ip=scanner.next();
        System.out.println("請輸入socket所使用的端口:");
        int mport=scanner.nextInt();
        System.out.println("請輸入對方端口:");
        int yport=scanner.nextInt();

        try {
            DatagramSocket socket = new DatagramSocket(mport);
            InetAddress target = InetAddress.getByName(ip);

            //開啓一個接收線程
            new Thread(()->{
                byte[] bytes = new byte[2048];
                DatagramPacket packet = new DatagramPacket(bytes,bytes.length);  //新建一個空的數據包
                while (true){
                    try {
                        socket.receive(packet);  //把接收到的數據放入數據包裏
                        String address = packet.getAddress().getHostAddress();   //這時獲取到的是對方的ip ,不知道啥時候發生的ip變換,
                        int port = packet.getPort();
                        byte[] data = packet.getData();
                         System.out.println("收到來自 :"+address +" 端口 :"+port +" 的信息   :  "+new String(data,0,data.length,"UTF-8"));

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();

            //主線程用於發送

            while (true){
                String s = scanner.next();
                if( s.equals("exit")) {
                    break;
                }
                byte[] bytes = s.getBytes("UTF-8");
                DatagramPacket packet = new DatagramPacket(bytes, bytes.length);  //傳入byte數組和他的長度新建數據包
                packet.setAddress(target);
                packet.setPort(yport);  //設置發送到接收人的端口號
                socket.send(packet);
            }




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

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章