UDP数据报
UDP协议
和TCP协议
的两者区别
TCP的网络套接字可以形象地比喻成打电话
,一方在呼叫,另一方在接听,一旦建立了套接字连接,双方就可以进行通信了
UDP的信息传递更快,但不提供可靠性保证,也就是说数据在传输的过程中无法保证信息到达的先后顺序,另外还有可能丢失,可以比喻成快递信件
基于UDP通信的基本模式
- 将数据打包,成为数据包,然后将数据包发往目的地
- 接收别人发来的数据包,然后查看数据包中的内容
发送数据包
用DatagramPacket类
将数据打包,也就是用DatagramPacket类创建对象,称为数据包
DatagramPacket的构造方法
DatagramPacket(byte data[ ],int length,InetAddress address,int port)
//address是这个数据包的目标地址,port是这个数据包的目标端口
DatagramPacket(byte data[ ],ubt offset,int length,InetAddress address,int port)
//offset是指从数组的某个位置开始
InetAddress inetAddress = InetAddress.getByName(IP);
DatagramPacket datagramPacket = new DatagramPacket(messBySend,messBySend.length,inetAddress,port);
DatagramSocket datagramSocket = new DatagramSocket();
datagramSocket.send(datagramPacket); //发送数据
数据包打包好后利用DatagramSocket 类
的不带参数的构造方法创建一个对象,该对象调用send(DatagramPacket pack)
方法发送数据包,括号里面填数据包对象
接收数据包
首先用DatagramSocket
的另一个构造方法DatagramSocket(int port)
创建一个对象,其中的参数端口要和发送时的端口要一致
DatagramPacket datagramPacket = null;
byte data[] = new byte[8192]; //最大为8192
datagramPacket = new DatagramPacket(data, data.length);
DatagramSocket datagramSocket = new DatagramSocket(port);
然后其对象使用receive(DatagramPacket pack)
接收数据包,因此必须预备一个数据包,一遍收取数据包,这时使用DatagramPack类的另一个构造方法DatagramPack(byte data[ ],int length)创建数据包,用于接收数据包
datagramSocket.receive(datagramPacket);
String message = new String(datagramPacket.getData(), 0, datagramPacket.getLength());
两个主机互相发送和接收数据包的例子
先创建一个发送数据包的类
package Chapter_16.Part_4;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class SendDataPacket {
byte messBySend[]; //用于存放要发送的数据
String IP; // 目标的IP地址
int port; //目标的端口号
public void setIP(String IP) {
this.IP = IP;
}
public