发送数据
UDP协议是
面向无连接的
"面向无连接的"通常指的是一种网络通信模式,也称为无连接通信或者数据报通信。在这种模式下,通信的两个端点之间不需要建立持续的连接,而是通过将数据分成小块(数据包)并单独发送来进行通信。每个数据包都包含了足够的信息(如源地址、目标地址、序列号等)来独立地到达目的地,并且可能以不同的路径到达。
无连接通信的优点包括简单、灵活和高效,因为不需要在通信的开始和结束时建立和释放连接。它适用于需要在网络中传输少量数据或需要快速发送数据的场景,比如实时音视频传输、互联网电话、在线游戏等。
import java.io.IOException;
import java.net.*;
public class Main {
public static void main(String[] args) throws IOException {
//发送数据
/*
创建DategramSocket对象(快递公司)
* 细节
* 绑定端口 以后我们就是通过这个端口往外发送
* 空参构造 所有的可用端口中随机一个进行使用
* 有参构造 指定端口号进行绑定
* */
DatagramSocket ds=new DatagramSocket();
//打包数据
String str="你好啊";
byte bytes[]=str.getBytes();
//发送电脑
InetAddress address=InetAddress.getByName("127.0.0.1");
//端口
int port=10086;
DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);
//发送数据
ds.send(dp);
//释放资源
ds.close();
}
}
接收数据
import java.io.IOException;
import java.net.*;
public class Receive {
public static void main(String[] args) throws IOException {
//接收数据
/*
创建DategramSocket对象(快递公司)
* 细节
* 在接收的时候,一定要绑定端口
* 而且绑定的端口一定要和发送的端口保持一致
*
* */
DatagramSocket ds=new DatagramSocket(10086);
//接收数据包
byte[] bytes=new byte[1024];
//接收数据时 是把数据放到bytes这个数组里面的
DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
ds.receive(dp);
//解析数据包
byte[] data=dp.getData();
int len=dp.getLength();
InetAddress address=dp.getAddress();//数据是从哪台电脑发送过来的
int port=dp.getPort();//获取对方的端口
//打印接收的数据
System.out.println(new String(data,0,len));
//打印数据是从哪台电脑的哪个端口发出的
System.out.println(address+" "+port);
ds.close();
}
}
receive方法时阻塞的
接收程序如果运行
会停留于此行 如果没有发送数据 就会一直停留在此处等待
只有发送程序启动了 才会进行receive下面代码的执行
UDP聊天室
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class send {
public static void main(String[] args) throws IOException {
//创建对象 没有指定端口 说明会从一个随机端口发出数据
DatagramSocket ds=new DatagramSocket();
//打包数据
Scanner sc=new Scanner(System.in);
while(true) {
System.out.println("请输入您要输入的话");
String str = sc.nextLine();
//循环退出条件
if(str.equals("886"))break;
byte[] bytes = str.getBytes();//打包成字节数组
InetAddress address = InetAddress.getByName("127.0.0.1");//接收数据的计算机
int port = 10086;//接收数据的端口
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
//发送数据
ds.send(dp);
}
//释放资源
ds.close();
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class receive {
public static void main(String[] args) throws IOException {
//创建对象DategramSocket的对象
DatagramSocket ds=new DatagramSocket(10086);
//接收数据包
byte[] bytes=new byte[1024];
DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
while (true) {
//接收数据
ds.receive(dp);
//解析数据包
byte[] data=dp.getData();
int len=dp.getLength();
String ip=dp.getAddress().getHostAddress();//获取IP
String name=dp.getAddress().getHostName();//获取名称
//打印数据
System.out.println(ip);
System.out.println(name);
System.out.println(new String(data,0,len));
}
}
}
我们通过修改运行配置能启动多个send类
实现多发送 网络聊天室功能
修改选项
就可以做到
最最基本的网络聊天室