UDP demo(java)
- 环境 1.8
- 客户端和服务端不要放到一个线程中去启动!
//udp 服务端
public class UdpServer{
public static void server(){
try {
InetAddress address = InetAddress.getLocalHost();//这个ip 地址,就是cmd使用ipconfig命令中ipv4地址
int port = 8080;
//创建DatagramSocket对象 socket对象
DatagramSocket socket = new DatagramSocket(port, address);
byte[] buf = new byte[1024]; //定义byte数组
DatagramPacket packet = new DatagramPacket(buf, buf.length); //创建DatagramPacket对象
System.out.println("服务端启动:" +address.getHostAddress()+":"+ port);
socket.receive(packet); //通过套接字接收数据
System.out.println("服务端接收完成:");
String getMsg = new String(buf, 0, packet.getLength());
System.out.println("客户端发送的数据为:" + getMsg);
//从服务器返回给客户端数据
InetAddress clientAddress = packet.getAddress(); //获得客户端的IP地址
int clientPort = packet.getPort(); //获得客户端的端口号
SocketAddress sendAddress = packet.getSocketAddress();
String feedback = "Received";
byte[] backbuf = feedback.getBytes();
DatagramPacket sendPacket = new DatagramPacket(backbuf, backbuf.length, sendAddress); //封装返回给客户端的数据
socket.send(sendPacket); //通过套接字反馈服务器数据
socket.close(); //关闭套接字
} catch (UnknownHostException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
}
}
//客户端
public class UdpClent{
public static void send(){
String serverPosrt = "127.0.0.1";//这个ip 地址,就是cmd使用ipconfig命令中ipv4地址
String msg = "Hello, World";
byte[] buf = msg.getBytes();
try {
InetAddress address = InetAddress.getByName(""); //服务器地址
int port = 8080; //服务器的端口号
//创建发送方的数据报信息
DatagramPacket dataGramPacket = new DatagramPacket(buf, buf.length, address, port);
DatagramSocket socket = new DatagramSocket(); //创建套接字
socket.send(dataGramPacket); //通过套接字发送数据
//接收服务器反馈数据
byte[] backbuf = new byte[1024];
DatagramPacket backPacket = new DatagramPacket(backbuf, backbuf.length);
socket.receive(backPacket); //接收返回数据
String backMsg = new String(backbuf, 0, backPacket.getLength());
System.out.println("服务器返回的数据为:" + backMsg);
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//启动服务端
public static void main(String[] args) {
UdpServer.server();
}
//启动客户端请求
public static void main(String[] args) {
UdpClent.send();
}