进阶day11-网络编程_UDP多发多收案例
This commit is contained in:
33
javaSE-day11/src/com/inmind/udp02/UdpClientDemo03.java
Normal file
33
javaSE-day11/src/com/inmind/udp02/UdpClientDemo03.java
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package com.inmind.udp02;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.*;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
//需求:使用UDP实现快速通信,实现多发多收
|
||||||
|
public class UdpClientDemo03 {
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
//创建客户端对象
|
||||||
|
DatagramSocket client = new DatagramSocket();//随机分配端口的客户端
|
||||||
|
//增加一个scanner对象,手动输入要发送的数据
|
||||||
|
Scanner sc = new Scanner(System.in);
|
||||||
|
//不停地输入,不停地发,当输入exit就停止
|
||||||
|
while (true) {
|
||||||
|
System.out.println("请输入要发送的内容:");
|
||||||
|
String msg = sc.nextLine();
|
||||||
|
//判断是否是结束消息
|
||||||
|
if ("exit".equals(msg)) {
|
||||||
|
System.out.println("谢谢使用,退出成功!!");
|
||||||
|
client.close();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//创建出数据包对象,封装要发送出去的数据
|
||||||
|
byte[] bytes = msg.getBytes();
|
||||||
|
DatagramPacket packet = new DatagramPacket(bytes, bytes.length, InetAddress.getLocalHost(), 10023);
|
||||||
|
//客户端发送出去
|
||||||
|
client.send(packet);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
47
javaSE-day11/src/com/inmind/udp02/UdpServerDemo02.java
Normal file
47
javaSE-day11/src/com/inmind/udp02/UdpServerDemo02.java
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
package com.inmind.udp02;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.DatagramPacket;
|
||||||
|
import java.net.DatagramSocket;
|
||||||
|
|
||||||
|
/*
|
||||||
|
作为UDP服务端,接收客户端发送的数据
|
||||||
|
|
||||||
|
在java中使用DatagramSocket来表示UDP的客户端和服务端
|
||||||
|
构造方法
|
||||||
|
DatagramSocket(int port) 创建服务端的Socket对象,并指定端口号。
|
||||||
|
|
||||||
|
常用方法:
|
||||||
|
void receive(DatagramPacket p) 使用数据包接收数据
|
||||||
|
|
||||||
|
DatagramPacket :数据包
|
||||||
|
DatagramPacket(byte[] buf, int length) 创建接收数据的数据包对象
|
||||||
|
int getLength() 返回要发送的数据的长度或接收到的数据的长度
|
||||||
|
|
||||||
|
需求:创建服务器,接收客户端的数据
|
||||||
|
*/
|
||||||
|
public class UdpServerDemo02 {
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
System.out.println("服务器启动了");
|
||||||
|
//1.创建服务器端对象
|
||||||
|
DatagramSocket server = new DatagramSocket(10022);
|
||||||
|
|
||||||
|
//2.创建出一个数据包对象,用来接收数据(接飞饼)
|
||||||
|
//DatagramPacket(byte[] buf, int length) 创建接收数据的数据包对象
|
||||||
|
byte[] buf = new byte[1024 * 64];//用来接收数据,最大64KB
|
||||||
|
DatagramPacket packet = new DatagramPacket(buf, buf.length);
|
||||||
|
|
||||||
|
//3.服务器开始正式使用数据包,接收客户端发来的数据
|
||||||
|
server.receive(packet);//阻塞方法
|
||||||
|
|
||||||
|
//4.从数据包中获取字节数据,并展示(接收多少个字节,就打印多少数据)
|
||||||
|
int length = packet.getLength();//数据的长度
|
||||||
|
//字节数据转为字符串展示
|
||||||
|
String result = new String(buf, 0, length);
|
||||||
|
//获取数据包的ip和端口
|
||||||
|
System.out.println(packet.getPort());
|
||||||
|
System.out.println(packet.getAddress().getHostAddress());
|
||||||
|
System.out.println(result);
|
||||||
|
server.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,44 +5,28 @@ import java.net.DatagramPacket;
|
|||||||
import java.net.DatagramSocket;
|
import java.net.DatagramSocket;
|
||||||
import java.net.SocketException;
|
import java.net.SocketException;
|
||||||
|
|
||||||
/*
|
//创建服务器端,不停地接收
|
||||||
作为UDP服务端,接收客户端发送的数据
|
|
||||||
|
|
||||||
在java中使用DatagramSocket来表示UDP的客户端和服务端
|
|
||||||
构造方法
|
|
||||||
DatagramSocket(int port) 创建服务端的Socket对象,并指定端口号。
|
|
||||||
|
|
||||||
常用方法:
|
|
||||||
void receive(DatagramPacket p) 使用数据包接收数据
|
|
||||||
|
|
||||||
DatagramPacket :数据包
|
|
||||||
DatagramPacket(byte[] buf, int length) 创建接收数据的数据包对象
|
|
||||||
int getLength() 返回要发送的数据的长度或接收到的数据的长度
|
|
||||||
|
|
||||||
需求:创建服务器,接收客户端的数据
|
|
||||||
*/
|
|
||||||
public class UdpServerDemo03 {
|
public class UdpServerDemo03 {
|
||||||
public static void main(String[] args) throws IOException {
|
public static void main(String[] args) throws IOException {
|
||||||
System.out.println("服务器启动了");
|
System.out.println("服务器启动");
|
||||||
//1.创建服务器端对象
|
|
||||||
DatagramSocket server = new DatagramSocket(10022);
|
|
||||||
|
|
||||||
//2.创建出一个数据包对象,用来接收数据(接飞饼)
|
//创建服务端对象
|
||||||
//DatagramPacket(byte[] buf, int length) 创建接收数据的数据包对象
|
DatagramSocket server = new DatagramSocket(10023);
|
||||||
byte[] buf = new byte[1024 * 64];//用来接收数据,最大64KB
|
|
||||||
DatagramPacket packet = new DatagramPacket(buf, buf.length);
|
|
||||||
|
|
||||||
//3.服务器开始正式使用数据包,接收客户端发来的数据
|
byte[] buf = new byte[1024 * 64];
|
||||||
server.receive(packet);//阻塞方法
|
while (true) {
|
||||||
|
//创建一个数据包对象不停地接收数据到数组中
|
||||||
|
DatagramPacket packet = new DatagramPacket(buf, buf.length);
|
||||||
|
|
||||||
//4.从数据包中获取字节数据,并展示(接收多少个字节,就打印多少数据)
|
//服务接收数据包
|
||||||
int length = packet.getLength();//数据的长度
|
server.receive(packet);
|
||||||
//字节数据转为字符串展示
|
//获取数据
|
||||||
String result = new String(buf, 0, length);
|
int length = packet.getLength();
|
||||||
//获取数据包的ip和端口
|
System.out.println(packet.getAddress().getHostAddress());
|
||||||
System.out.println(packet.getPort());
|
System.out.println(packet.getPort());
|
||||||
System.out.println(packet.getAddress().getHostAddress());
|
System.out.println(new String(buf,0,length));
|
||||||
System.out.println(result);
|
}
|
||||||
server.close();
|
|
||||||
|
// server.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user