DatagramPacket 在码头发送和接收货物时都需要使用集装箱来装载货物,UDP通信也是一样,发送和接收的数据也需要使用“集装箱”进行打包,为此JDK中提供了一个DatagramPacket类,该类的实例对象就相当于一个集装箱...接下来根据API文档的内容,对DatagramPacket的构造方法进行逐一详细地讲解。...DatagramPacket DatagramPacket数据包的作用就如同是“集装箱”,可以将发送端或者接收端的数据封装起来。然而运输货物只有“集装箱”是不够的,还需要有码头。...在程序中需要实现通信只有DatagramPacket数据包也同样不行,为此JDK中提供的一个DatagramSocket类。...DatagramSocket类的作用就类似于码头,使用这个类的实例对象就可以发送和接收DatagramPacket数据包,发送数据的过程如下图所示。
1.基本概念: a.DatagramPacket与DatagramSocket位于java.net包中 b.DatagramPacket表示存放数据的数据报,DatagramSocket表示接受或发送数据报的套接字...2.使用方法: 要建立基于UDP协议的链接,我们应该先建立套接字(即发送站或接收站),之后通过套接字发送或接受数据。 ...我们先了解一下DatagramSocket和DatagramPacket类 DatagramSocket类: 构造方法: DatagramSocket(): 表示创建一个默认的套接字...基本方法: close(): 关闭套接字 recevie(DatagramPacket dp): 接受数据报 send(DatagramPacket dp): 发送数据报... 这里触及了数据报,下面介绍数据报: DatagramPacket类: 构造方法:(只列出主要的) 接受类型: DatagramPacket(byte[] buf, int
Java DatagramSocket和DatagramPacket 1 Java DatagramSocket和DatagramPacket Java DatagramSocket和DatagramPacket...3 Java DatagramPacket类 Java DatagramPacket是可以发送或接收的消息。如果发送多个数据包,则它可能以任何顺序到达。此外,不能保证数据包的传递。...3.1 Java DatagramPacket类的构造方法 构造方法 描述 DatagramPacket(byte[] barr, int length) 创建一个DatagramPacket。...DatagramPacket(byte[] barr, int length, InetAddress address, int port) 创建一个DatagramPacket。...4 DatagramSocket和DatagramPacket的例子 4.1 通过DatagramSocket发送DatagramPacket package com.yiidian; /** * 一点教程网
文章目录 I DatagramSocket II DatagramSocket 构造方法 III DatagramSocket 数据操作 IV DatagramPacket V DatagramPacket...构造方法 VI DatagramPacket 设置参数 VII DatagramPacket 获取参数 VIII DatagramPacket IP 地址 端口号 说明 I DatagramSocket...接收数据方法 : receive( DatagramPacket dp ) : 接收数据 ; 2. 发送数据 : send( DatagramPacket dp ) : 发送数据 ; 3....释放资源 : close() ; IV DatagramPacket ---- DatagramPacket : 用于处理报文 , 其封装了发送的信息 byte[] 数组 , 目标 IP 地址 , 目标端口号等信息..., 封装成报文 ; 也可以将报文拆解成 byte[] 数组信息 ; 该类时 UDP 数据的发送和接收的实体 ; V DatagramPacket 构造方法 ---- DatagramPacket 构造方法
Java中的DatagramPacket与DatagramSocket的初步 扩展的代码如下: 1.接收端工程代码: 由于接收端的控制台log会被发送端的log冲掉,所以把log写到文件中。...java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.net.DatagramPacket...getPacket = new DatagramPacket(buf, buf.length); // 通过套接字接收数据, 此方法是阻塞的,会一直等待消息...sendPacket = new DatagramPacket(backBuf, backBuf.length, sendAddress); // 通过套接字发送数据...getPacket = new DatagramPacket(getBuffer, getBuffer.length); // 通过套接字接收数据
输出流服务器端: ServerSocket --> Socket 程序感受到的使用流 :输入流(客户端和服务器端地位不平等)UDP发送方:DatagramSocket 发送:数据包 DatagramPacket...dp = new DatagramPacket(bytes,bytes.length, InetAddress.getByName("localhost"),9999); //发送:...dp = new DatagramPacket(b,b.length); //3.接收对方的数据包,然后放入我们的dp数据包中填充 ds.receive(dp);//接收完以后...ds.send(dp); //接收老师发送回来的信息: byte[] b = new byte[1024]; DatagramPacket dp2 = new...DatagramPacket(b,b.length); ds.receive(dp2);//接收完以后 dp2里面就填充好内容了 //取出数据: byte[]
- 报文 DatagramPacket packet = new DatagramPacket(new byte[1024], 1024); while (true)...(); } } Netty的UDP实现 DatagramSocket 对应 NioDatagramChannel java.net.datagramPacket 对应 import io.netty.channel.socket.DatagramPacket...protected void channelRead0(ChannelHandlerContext channelHandlerContext, DatagramPacket datagramPacket...packet = new DatagramPacket(buf, datagramPacket.sender()); channelHandlerContext.writeAndFlush...datagramPacket) throws Exception { String resp = datagramPacket.content().toString(CharsetUtil.UTF
1.发送端代码 @发送端代码 import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket...packet = new DatagramPacket(send_data,0,send_data.length, new InetSocketAddress("127.0.0.1",888));...-- --> byte[] buffer =new byte[1024]; DatagramPacket packet = new DatagramPacket...packet = new DatagramPacket(send_data, 0, send_data.length, new InetSocketAddress(this.toIP,this.toPort...-- --> byte[] buffer =new byte[1024]; DatagramPacket packet = new DatagramPacket
DatagramSocket(int port) DatagramSocket ds = new DatagramSocket(10086); // 创建一个数据包(接收容器) // DatagramPacket...(byte[] buf, int length) byte[] bys = new byte[1024]; int length = bys.length; DatagramPacket dp...= new DatagramPacket(bys, length); // 调用Socket对象的接收方法接收数据 // public void receive(DatagramPacket...dp = new DatagramPacket(bys, length, address, port); // 调用Socket对象的发送方法发送数据包 // public void send...(DatagramPacket p) ds.send(dp); // 释放资源 ds.close(); } } 注意: 多次启动接收端,会报错!
创建并设置 DatagramPacket 对象 : 发送的数据包实体是 DatagramPacket 对象 , 将目标设备的 IP 地址 , 端口号 , 发送的 byte[] 数组数据 , 设置到该数据包实体中...创建并设置 DatagramPacket 对象 : 接收的数据包实体是 DatagramPacket 对象 , 需要为其设置一个接收数据的缓冲区 , 接收到数据包后 , 系统会自动将发送信息的设备的 IP...接收 UDP 数据包使用的 DatagramPacket 对象 DatagramPacket receivePacket = new DatagramPacket(receiveBuffer...接收 UDP 数据包使用的 DatagramPacket 对象 DatagramPacket receivePacket = new DatagramPacket(receiveBuffer...接收 UDP 数据包使用的 DatagramPacket 对象 DatagramPacket receivePacket = new DatagramPacket(receiveBuffer
下面看一下DatagramPacket的构造器。...DatagramPacket(byte[] buf, int length, InetAddress addr, int port):以一个包含数据的数组来创建DatagramPacket对象,创建该DatagramPacket...如下代码所示: //创建一个接收数据的DatagramPacket对象 DatagramPacket packet=new DatagramPacket(buf, 256);//接收数据报 socket.receive...开发者只关心该DatagramPacket能放多少数据,而DatagramPacket是否采用字节数组来存储数据完全不想关心。...但Java要求创建接收数据用的DatagramPacket时,必须传入一个空的字节数组,该数组的长度决定了该DatagramPacket能放多少数据,这实际上暴露了DatagramPacket的实现细节
UDP通信主要有两个类,DatagramPacket是数据容器,它携带自己来自何处,以及打算去哪里的信息。DatagramSocket用来发送或接收DatagramPacket。...DatagramPacket不仅需要包含正式的数据,也要包含网络地址以及端口号,以决定它的目的地。 ...static void main(String[] args) throws IOException { byte[] bufreceive = new byte[1000]; DatagramPacket...packetreceive = new DatagramPacket(bufreceive, bufreceive.length);//测试结果bufreceive.length...sendpacket = new DatagramPacket(bufsend, bufsend.length, destination, SERVERPORT);
) 发送数据 * receive(DatagramPacket) 接收数据 * close() 释放资源 ② DatagramPacket...* DatagramPacket(byte[],length) 用于接受长度为 length 的数据 * DatagramPacket(byte[],length,address...getBytes(); //创建 DatagramPacket DatagramPacket packet = new DatagramPacket(bytes...DatagramPacket packet1 = new DatagramPacket(bytes1,bytes1.length); //接受数据...DatagramPacket packet = new DatagramPacket(bytes,bytes.length); //接受数据
UDP的实现 Java中实现UDP协议的两个类,分别是DatagramPacket数据包类以及DatagramSocket套接字类。 ...发送和接收数据、地址和端口都封装在数据包类DatagramPacket中。...---- DatagramPacket类 构造函数: public DatagramPacket(byte[] buf,int length); /*offset为buf缓冲区的偏移量*/ public...DatagramPacket(byte[] buf,int offset,int length); /*address表示目的地址 port表示目的端口*/ public DatagramPacket...packet=new DatagramPacket(bf, 1024); System.out.println("UDP Server Start...
对象的send()方法,发送出去,参数:DatagramPacket对象 调用DatagramSocket对象的close()方法,关闭资源 import java.net.DatagramPacket...,int长度 调用DatagramSocket对象的receive()方法,接收数据,参数:DatagramPacket对象 调用DatagramPacket对象的getAddress()方法,获取到InetAdress...对象 调用DatagramPacket对象的getData()方法,获取到byte[]字节数组,接收的数据 调用DatagramPacket对象的getLength()方法,获取到数据长度 通过new...datagramPacket=new DatagramPacket(buf, buf.length); ds.receive(datagramPacket);...InetAddress ip= datagramPacket.getAddress(); int port=datagramPacket.getPort(); byte[
.*; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress...; DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(), msg.getBytes().length, new...注意:该连接监听接收端口为发送一方的DatagramPacket的传输端口 * 2.创建数据包DatagramPacket;仅作为接收数据的存储,无需再监听端口 * 3.接收行为...datagramPacket = new DatagramPacket(bytes, bytes.length); int count = 0; while (count...; byte[] data = datagramPacket.getData(); //step 3.2 int length = datagramPacket.getLength
对象向外发送数据报 1.2.2 DatagramPacket 类 使用 DatagramSocket 发送数据报时,DatagramSocket 并不知道将该数据报发送到哪里,而是由 DatagramPacket...构造方法 public DatagramPacket(byte[] buf,int length):以一个空数组来创建 DatagramPacket 对象,该对象的作用是接收 DatagramSocket...public DatagramPacket(byte[] buf, int offset, int length):以一个空数组来创建 DatagramPacket 对象,并指定接收到的数据放入 buf...getBytes(); // 创建 DatagramPacket DatagramPacket sendPacket = new...DatagramPacket sendPacket = new DatagramPacket(sendBytes, sendBytes.length
方法声明 功能描述 void receive(DatagramPacket p) 该方法用于接收DatagramPacket数据报,在接收到数据之前会一直处于阻塞状态,如果发送消息的长度比数据报长,则消息将会被截取...void send(DatagramPacket p) 该方法用于发送DatagramPacket数据报,发送的数据报中包含将要发送的数据、数据的长度、远程主机的IP地址和端口号 void close...datagramPacket = new DatagramPacket( byteArrayOutputStream.toByteArray(),...datagramPacket = new DatagramPacket(data, data.length); //调用ds对象的方法receive传递数据包...datagramSocket.receive(datagramPacket); String msg = new String(datagramPacket.getData(),
datagramPacket = new DatagramPacket(ip.getBytes(), ip.length(), broadcaseAddress, 1900);...datagramPacket.setAddress(broadcaseAddress); datagramPacket.setPort(1900);...multicastSocket.send(datagramPacket); try { Thread.sleep...datagramPacket = new DatagramPacket(buf, buf.length); multicastSocket.receive...(datagramPacket); // 接收数据,同样会进入阻塞状态 byte[] message = new byte[datagramPacket.getLength
package aaa; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket...; // 下一步 服务器接受客户端传来的数据,然后经过变换发送出去 // 首先接收数据 while (true) { byte[] buf = new byte[1024]; DatagramPacket...dpa = new DatagramPacket(buf, buf.length); //接收指定长度的数据包 ds.receive(dpa); String strReceive =...System.out.println("客户端传来的信息:" + strReceive); // 变换一下发送出去 String strSend = "服务器接收的数据是: " + strReceive; DatagramPacket...dpSend = new DatagramPacket(strSend.getBytes(), strSend.getBytes().length, dpa.getAddress(), dpa.getPort
领取专属 10元无门槛券
手把手带您无忧上云