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上添加命令行步骤如下: