zoukankan      html  css  js  c++  java
  • 网络编程应用:基于UDP协议【实现聊天程序】--练习

    要求:

    使用UDP协议实现一个聊天程序
    

    代码:


    发送端:

    package UDP聊天程序;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.net.UnknownHostException;
    import java.util.Scanner;
    
    public class Send {
        public static void main(String[] args) {
            System.out.println("发送端已启动!");
    
            DatagramSocket socket=null;
            Scanner scanner=new Scanner(System.in);
            try {
                //1.创建Datagramsocket对象
                socket=new DatagramSocket();
    
                while(true){
                    //2.要发送的数据
                    String string=scanner.nextLine();
    
                    //3.创建数据包
                    DatagramPacket packet=new DatagramPacket(string.getBytes(), string.getBytes().length,InetAddress.getLocalHost(),6666);
                    //4.发送数据
                    socket.send(packet);
                    //若我方发送了bye,马上结束聊天
                    if(string.equals("bye")){
                        System.out.println("bye,聊天结束!");
                        break;
                    }
    
                    //5.接收--接收端回复的数据
                    byte[] bs=new byte[1024];
                    DatagramPacket packet2=new DatagramPacket(bs, bs.length);
                    socket.receive(packet2);
                    String string2=new String(packet2.getData(), 0, packet2.getLength());
                    //若对方发送了bye,马上结束聊天
                    if(string2.equals("bye")){
                        System.out.println("bye,聊天结束!");
                        break;
                    }
                    System.out.println("接收端回复:"+string2);
                }
    
    
            } catch (SocketException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                if(socket!=null){
                    socket.close();
                }
            }
    
        }
    }
    

    接收端:

    package UDP聊天程序;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    import java.util.Scanner;
    
    public class Receive {
        public static void main(String[] args) {
            System.out.println("接收端已启动!");
    
            DatagramSocket socket=null;
            Scanner scanner=new Scanner(System.in);
            try {
                //1.创建Datagrams对象
                socket=new DatagramSocket(6666);
    
                while(true){
                    //2.创建数据包packet
                    byte[] buf=new byte[1024];
                    DatagramPacket packet=new DatagramPacket(buf, buf.length);
                    //3.接收数据
                    socket.receive(packet);
                    String string=new String(packet.getData(), 0, packet.getLength());
                    //若对方发送了bye,马上结束聊天
                    if(string.equals("bye")){
                        System.out.println("bye,聊天结束!");
                        break;
                    }
                    System.out.println("发送端说:"+string);
    
                    //4.给发送端回复
                    String string2=scanner.nextLine();
                    DatagramPacket packet2=new DatagramPacket(string2.getBytes(), string2.getBytes().length,packet.getAddress(),packet.getPort());
                    socket.send(packet2);
                    //若我方发送了bye,马上结束聊天
                    if(string2.equals("bye")){
                        System.out.println("bye,聊天结束!");
                        break;
                    }
                }
            } catch (SocketException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                if(socket!=null){
                    socket.close();
                }
            }
    
        }
    }
    

    运行结果:


    接收端聊天列表:

    这里写图片描述


    发送端聊天列表:

    这里写图片描述

  • 相关阅读:
    【树状数组套权值线段树】bzoj1901 Zju2112 Dynamic Rankings
    【权值线段树】bzoj3224 Tyvj 1728 普通平衡树
    【转载】【树形DP】【数学期望】Codeforces Round #362 (Div. 2) D.Puzzles
    ReStart
    Good-Bye
    【分块打表】bzoj1662 [Usaco2006 Nov]Round Numbers 圆环数
    【分块打表】bzoj1026 [SCOI2009]windy数
    【分块打表】bzoj3798 特殊的质数
    【分块打表】bzoj3758 数数
    【线段树】bzoj3995 [SDOI2015]道路修建
  • 原文地址:https://www.cnblogs.com/TCB-Java/p/6854006.html
Copyright © 2011-2022 走看看