转载请注明出处:网络通信 Datagram 实现UDP_udp1_newdatagram_Mr_Leixiansheng的博客-CSDN博客
UdpServer
1、创建DatagramSocket,指定端口号
2、创建DatagramPacket,接收客户端发送的数据
3、接收客户端数据
4、读取数据
5、服务器反馈
UdpClient
1、定义发送信息、地址、端口
2、创建DatagramPacket ,包含要发送的信息
3、创建DatagramSocket
4、发送数据
5、客户端接收数据
UdpServer
package com.leixiansheng;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/**
*
* @author leixiansheng
*服务器 基于UDP信息
*/
public class UdpService {
public static void main(String[] args) {
try {
/**
* 服务器接收
*/
//1、创建DatagramSocket,指定端口号
DatagramSocket socket = new DatagramSocket(8800);
//2、创建DatagramPacket,接收客户端发送的数据
byte[] data = new byte[1024];//指定接收的数据包大小
DatagramPacket packet = new DatagramPacket(data, 0, data.length);
System.out.println("***服务器启动成功,等待客户端***");
//3、接收客户端数据
socket.receive(packet); //阻塞在此
//4、读取数据
String content = new String(data, 0, packet.getLength());
System.out.println("我是服务器,客户端内容是:"+content);
/**
* 服务器反馈
*/
//1、定义发送信息
InetAddress address = packet.getAddress();
int port = packet.getPort();
byte[] data2 = "欢迎登录".getBytes();
//2、
DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
//3、发送数据
socket.send(packet2);
//4、关闭资源
socket.close();
// udpThread(socket); //UDP多线程
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void udpThread(DatagramSocket socket) {
System.out.println("***服务器启动成功,等待客户端***");
int num=0;
while(true){
try {
//2、创建DatagramPacket,接收客户端发送的数据
byte[] data = new byte[1024];//指定接收的数据包大小
DatagramPacket packet = new DatagramPacket(data, 0, data.length);
//3、接收客户端数据
socket.receive(packet); //阻塞在此
UdpThread udpThread = new UdpThread(socket,packet,data);
udpThread.setPriority(4);
udpThread.start();
num++;
System.out.println("客户端数量:"+num);
} catch (IOException e) {
e.printStackTrace();
} //阻塞在此
}
}
}
UdpClient
package com.leixiansheng;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
/**
*
* @author leixiansheng
*客户端
*/
public class UdpClient {
public static void main(String[] args) {
try {
/**
* 客户端发送数据
*/
//1、定义发送信息、地址、端口
InetAddress address = InetAddress.getByName("localhost");
int port = 8800;
byte[] data = "我要登录".getBytes();
//2、创建DatagramPacket ,包含要发送的信息
DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
//3、创建DatagramSocket
DatagramSocket socket = new DatagramSocket();
//4、发送数据
socket.send(packet);
/**
* 客户端接收数据
*/
byte[] data2 = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
socket.receive(packet2);
String content = new String(data2, 0, packet2.getLength());
System.out.println("我是客户端,服务器内容是:"+content);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
UdpThread
package com.leixiansheng;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UdpThread extends Thread {
DatagramSocket socket;
DatagramPacket packet;
byte[] data;
public UdpThread(DatagramSocket socket,DatagramPacket packet,byte[] data) {
this.socket = socket;
this.packet = packet;
this.data = data;
}
@Override
public void run() {
try {
//4、读取数据
String content = new String(data, 0, packet.getLength());
System.out.println("我是服务器,客户端内容是:"+content);
/**
* 服务器反馈
*/
//1、定义发送信息
InetAddress address = packet.getAddress();
int port = packet.getPort();
byte[] data2 = "欢迎登录".getBytes();
//2、
DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
//3、发送数据
socket.send(packet2);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}