吹静静

欢迎QQ交流:592590682

package Day10;


import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.util.Scanner;

/**
 * 聊天消息接受者
 * @author Administrator
 *
 */
class Receiver implements Runnable {
    public void run() {
        DatagramSocket ds = null;
        try {
            /**
             * 创建接收端
             * 1、DatagramSocket(int port)
             *             构造一个数据报套接字绑定到本地主机上的指定端口。 
             */
            ds = new DatagramSocket(12345);
            
            while(true) {
                // 接收数据包
                byte[] data = new byte[1024];
                DatagramPacket dp = new DatagramPacket(data, data.length);
                ds.receive(dp);
                // 获取接收到的数据包的信息
                /**
                 * 1、InetAddress类型     getAddress()
                 *                    返回机器的IP地址的数据报发送或者接收的数据报。 (数据报二进制)
                 * 2、getHostAddress()
                 *               返回的IP地址字符串的文本表示。 
                 * 
                 */
                String msg = new String(data, 0, dp.getLength());
                String ip = dp.getAddress().getHostAddress();
                //int port = dp.getPort();
                
                System.err.println(ip + msg);
                
            }
            
        }catch(Exception e) {
            e.getStackTrace();
        }finally {
            // 关闭套接字
            if(ds != null)
                ds.close();
        }
    }
}
/**
 * 聊天消息发送者
 * @author Administrator
 *
 */
class Sender implements Runnable{
    
    Scanner s = null;
    DatagramSocket ds = null;
    @Override
    public void run() {
        try {
            // 创建发送端
            ds = new DatagramSocket();
            // 设置端口和ip
            int port = 12345;
            String ip = "172.180.8.50";
            // 创建控制台扫描器
            s = new Scanner(System.in);
            while(true) {
                // 读取控制台信息
                // System.out.println("--------没有格式,直接输入--------");
                String str = "cjj: "+ s.nextLine();
                byte[] msg = str.getBytes();
                /**
                 * 发送数据
                 * 1、InetSocketAddress(InetAddress addr, int port)
                 *                    创建一个套接字地址的IP地址和端口号。 
                 * 2、 getSocketAddress()
                 *                 得到了SocketAddress(通常是IP地址+端口号)都的远程主机,这包被发送到或来自。 
                 * 3、send(DatagramPacket p)
                 *               从这个套接字发送一个数据报包。 
                 */
                DatagramPacket dp = new DatagramPacket(msg, msg.length);
                dp.setSocketAddress(new InetSocketAddress(ip , port));
                ds.send(dp);
            }
            
            
        }catch(Exception e) {
            e.getStackTrace();
            
        }finally {
            if(ds != null)
                ds.close();
            if(s != null)
                s.close();
        }
    }
}

public class QQ {
    public static void main(String[] args) throws Exception {
        new Thread(new Sender()).start();
        new Thread(new Receiver()).start();
    }
}

 

package QQ;


import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.util.Scanner;

public class QQ1 {

    public static void main(String[] args) {
        new Thread(new Sender()).start();
        new Thread(new Receiver()).start();
    }

}

class Sender implements Runnable {
    @Override
    public void run() {
        Scanner sc = new Scanner(System.in);
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket();
            while (true) {
                System.out.print("请输入发送的内容 :");
                String str = sc.nextLine();
                DatagramPacket dp = new DatagramPacket(str.getBytes(), str.getBytes().length);
                dp.setSocketAddress(new InetSocketAddress("172.180.8.50", 12345));
                ds.send(dp);
                System.out.println();
            }
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ds != null)
                ds.close();
            if (sc != null)
                sc.close();
        }
    }
}

class Receiver implements Runnable {

    @Override
    public void run() {
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket(12345);
            while (true) {
                byte[] data = new byte[1024];
                DatagramPacket dp = new DatagramPacket(data, data.length);
                ds.receive(dp);
                String str = new String(data, 0, dp.getLength());
                String ip = dp.getAddress().getHostAddress();
                int port = dp.getPort();
                System.err.println("老刘:" + str);
            }
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ds != null) {
                ds.close();
            }
        }
    }
}

 

posted on 2018-08-27 19:49  吹静静  阅读(268)  评论(0编辑  收藏  举报