java——简单的UDP程序设计

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Random;

/**
 * @ClassName QuoteServer
 * @Description 服务器
 * @Author lzq
 * @Date 2018/12/12 17:08
 * @Version 1.0
 **/
public class QuoteServer {
    static int index = 5;
    static String[] quotes = new String[]{"To be,or not to be:that is the question",
                          "冰冻三尺,非一日之寒",
              "生气,就是拿别人的过错惩罚自己,原谅自己,就是善待自己",
    "小胜凭智,大胜靠德","人无远虑,必有近忧","生于忧患,死于安乐",
    "勇者无畏,智者无惧","事实胜于雄辩,百闻不如一见","舍得有限,赢得无限",
    "勿以恶小而为之,勿以善小而不为","有志者立长志,无志者常立志",
            "智者千虑,必有一失,愚者千虑,必有一得",
    "学而不思则罔,思而不学则殆","鞠躬尽瘁,死而后已","不鸣则已,一鸣惊人",
    "满招损,谦受益","塞翁失马,焉知非福","忠言逆耳利于行,良药苦口利于病",
    "宝剑锋从磨砺出,梅花香自苦寒来"};

    public static void main(String[] args) throws Exception{
        byte[] inbuf = new byte[256];    //创建缓冲区
        DatagramSocket socket = new DatagramSocket(1234);
        while (true) {
            //步骤一:等待并接收来自客户机的数据包(即请求)
            DatagramPacket inpacket = new DatagramPacket(inbuf,inbuf.length);
            socket.receive(inpacket);  //接收数据包
            String string = getNextQuote();   //获取一句名言
            byte[] outbuf = string.getBytes();  //把String转换成字节数组,以便发送
            //获取客户端的IP地址和端口号
            InetAddress address = inpacket.getAddress();
            int port = inpacket.getPort();
            DatagramPacket outpacket = new DatagramPacket(outbuf,outbuf.length,address,port);
            socket.send(outpacket);   //发送数据包
        }
    }

    /**
     * 获取一句名言
     * @return
     */
    private static String getNextQuote() {
        Random random = new Random();
        index = random.nextInt(19);
        String s = quotes[index];
        return s;
    }
}
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * @ClassName QuoteClient
 * @Description 客户端
 * @Author lzq
 * @Date 2018/12/12 17:32
 * @Version 1.0
 **/
public class QuoteClient {
    public static void main(String[] args) throws Exception{
        if(args.length != 1) {
            //如果启动的时候没有给出服务器名称或IP地址,那么打印出错信息并退出
            System.out.println("错误!");
            return;
        }
        //步骤一:发送一个数据包到服务器
        DatagramSocket socket = new DatagramSocket();  //创建数据报套接字
        byte[] buf = new byte[256];   //创建缓冲区
        //命令行给出的第一个参数默认为Server的名字,通过它得到Sever的IP信息
        InetAddress address = InetAddress.getByName(args[0]);
        DatagramPacket packet = new DatagramPacket(buf,buf.length,address,1234);
        socket.send(packet);
        //步骤二:等待并接收服务器返回的数据包
        packet = new DatagramPacket(buf,buf.length);  //用来接收数据包
        socket.receive(packet);  //接收数据包
        String string = new String(packet.getData());  //将接收到的字节数组,生成相应的字符串
        System.out.println(string);
        socket.close();
    }
}

运行客户端前,先添加命令行参数:
1、idea上添加命令行步骤如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

终端添加命令行参数参考

猜你喜欢

转载自blog.csdn.net/QQ2899349953/article/details/84977360