多发多收的例子:弹幕。
多发多收过程分析:
发送端可以一直发送消息。
接收端可以不断的接收多个发送端的消息展示。
发送端输入了exit则结束发送端程序。
客户端实现步骤:
创建DatagramSocket对象(发送端对象)。
使用while死循环不断的接收用户的数据输入,如果用户输入的exit则退出程序,如果用户输入的不是exit, 把数据封装成DatagramPacket。
使用DatagramSocket对象的send方法将数据包对象进行发送。
释放资源。
接收端实现步骤:
创建DatagramSocket对象并指定端口(接收端对象)。
创建DatagramPacket对象接收数据(数据包对象)。
使用while死循环不断的进行第4步。
使用DatagramSocket对象的receive方法传入DatagramPacket对象。
代码实现
public class ClientDemo1 {
public static void main(String[] args) throws Exception {
System.out.println("=====客户端启动======");
// 1、创建发送端对象:发送端自带默认的端口号(人)
DatagramSocket socket = new DatagramSocket(7777);
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请说:");
String msg = sc.nextLine();
if("exit".equals(msg)){
System.out.println("离线成功!");
socket.close();
break;
}
// 2、创建一个数据包对象封装数据(韭菜盘子)
byte[] buffer = msg.getBytes();
DatagramPacket packet = new DatagramPacket( buffer, buffer.length,
InetAddress.getLocalHost() , 8888);
// 3、发送数据出去
socket.send(packet);
}
}
}
public class ServerDemo2 {
public static void main(String[] args) throws Exception {
System.out.println("=====服务端启动======");
// 1、创建接收端对象:注册端口(人)
DatagramSocket socket = new DatagramSocket(8888);
// 2、创建一个数据包对象接收数据(韭菜盘子)
byte[] buffer = new byte[1024 * 64];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
while (true) {
// 3、等待接收数据。
socket.receive(packet);
// 4、取出数据即可
// 读取多少倒出多少
int len = packet.getLength();
String rs = new String(buffer,0, len);
System.out.println("收到了来自:" + packet.getAddress() +", 对方端口是" + packet.getPort() +"的消息:" + rs);
}
}
}