发送数据
面向无连接的
"面向无连接的"通常指的是一种网络通信模式,也称为无连接通信或者数据报通信。在这种模式下,通信的两个端点之间不需要建立持续的连接,而是通过将数据分成小块(数据包)并单独发送来进行通信。每个数据包都包含了足够的信息(如源地址、目标地址、序列号等)来独立地到达目的地,并且可能以不同的路径到达。
无连接通信的优点包括简单、灵活和高效,因为不需要在通信的开始和结束时建立和释放连接。它适用于需要在网络中传输少量数据或需要快速发送数据的场景,比如实时音视频传输、互联网电话、在线游戏等。
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类
实现多发送 网络聊天室功能
修改选项
就可以做到
最最基本的网络聊天室