用Java UDP 实现模拟Ping程序
服务端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.nio.charset.StandardCharsets;
public class UdpPingService {
public static void main(String[] args) throws Exception
{
DatagramSocket datagramSocket = new DatagramSocket(80);
while (true)
{
byte[] data=new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(data,data.length);
datagramSocket.receive(datagramPacket);
int random=(int)(Math.random()*10);
String str =new String(data,0,datagramPacket.getLength(),"UTF-8").toUpperCase();
byte[] data1 =str.getBytes("UTF-8");
if(random<4)continue;
DatagramPacket datagramPacket1 = new DatagramPacket(data1,data1.length,datagramPacket.getAddress(),datagramPacket.getPort());
datagramSocket.send(datagramPacket1);
}
}
}
客户端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Date;
import java.util.Scanner;
public class UdpPingClient {
public static void main(String[] args) throws Exception{
DatagramSocket datagramSocket = new DatagramSocket(8080);
datagramSocket.setSoTimeout(1000);
for(int i=1;i<=10;i++)
{
String str="Ping "+i+" "+new Date().toString();
byte[] data=str.getBytes("UTF-8");
DatagramPacket datagramPacket= new DatagramPacket(data,data.length, InetAddress.getByName("localhost"),80);
System.out.print(str+" ");
long startTime = System.currentTimeMillis();
datagramSocket.send(datagramPacket);
byte[] data1=new byte[1024];
DatagramPacket datagramPacket1=new DatagramPacket(data1,data1.length);
try {
datagramSocket.receive(datagramPacket1);
} catch (IOException e) {
System.out.print("超时");
}
long endTime = System.currentTimeMillis();
String str1=new String(data1,0,datagramPacket1.getLength(),"UTF-8");
System.out.println(str1+" "+(endTime - startTime) + "ms");
}
}
}