UDP通信

       UDP就像港口与港口之间运送货物,数据报包对货物进行打包,套接字就好像运送货物的港口,另外发送货物与接收货物需要指定货物从哪来,也就是IP和端口。

DatagramPacket的构造方法

DatagramPacket(byte[ ] buf,int length) 用于接收数据包,指定数据的数组名及数据的大小
DatagramPacket(byte[ ] buf,int length,InetAddress addr,int port) 用于发送端,指定了数据的大小,并指定了数据包的IP地址以及端口号
DatagramPacket(byte[ ] buf,int offset,int length) 用于接收数据包,放到缓冲区数组时从offset处开始
DatagramPacket(byte[ ] buf,int offset,int length,InetAddress addr,int port) 用于发送数据包,发送时从offset位置开始发送数据。

DatagramPacket类的常用方法

InetAddress getAddress()

用于获取DatagramPacket的IP地址,如果是发送端的DatagramPacket对象,就返回接收端的IP地址

反之,就返回发送端的IP地址

int getPort() 用于获得端口,如果是发送端的DatagramPacket就返回接收端的端口号,反之,就返回发送端的端口号
Byte[ ] getData() 返回数据报数据,如果是发送端的DatagramPacket对象,就返回将要发送的数据,反之,就返回接收到的数据
int getLength() 获得数据包的长度,如果是发送端的DatagramPacket对象,返回将要发送的数据长度,反之,就返回接收到的数据长度。

DatagramSocket类的构造方法

DatagramSocket() 创建发送端的DatagramSocket对象,如果没有分配指定的端口号,系统还会自动分配端口号
DatagramSocket(int port) 创建接收端或发送端的DatagramSocket对象,创建接收端的对象时,必须指定一个端口号,这样就可以监听这个端口
DatagramSocket(int port,InetAddress addr) 适用于多网卡的情况,通过IP确定使用哪块网卡

DatagramSocket常用的方法

void receive(DatagramPacket p) 该方法用于将接收到的DatagramPacket数据包中,在接收到数据之前会一直处于阻塞状态,只有接收数据时,该方法才被执行
void send(DatagramPacket p) 用于发送DatagramPacket数据包,发送的数据包中包含将要发送的数据,数据的长度,远程主机的IP地址和端口号
void close() 关闭当前的Socket,通知驱动程序释放这个Socket保留的资源

接收数据的代码

package net;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class Net {
	public static void main(String args[])throws Exception{
		
		byte[] buf=new byte[1024];
		//定义一个套接字(货运港口)
		DatagramSocket ds=new DatagramSocket(8954);
		//准备一个集装箱
		DatagramPacket dp=new DatagramPacket(buf,1024);
		System.out.println("等待接收数据");
		//进行货物接收
		ds.receive(dp);
		String str=new String(dp.getData(),0,dp.getLength())+" from"+
		dp.getAddress().getHostAddress()+":"+dp.getPort();
		System.out.println(str);
		ds.close();
	}

}

发送数据的代码

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Send {

	public static void main(String args[])throws Exception{
		//创建一个港口
		DatagramSocket ds=new DatagramSocket();
		String str="hello world";
		//定义一个集装箱
		DatagramPacket dp=new DatagramPacket(str.getBytes(),str.length(),
				InetAddress.getByName("localhost"),8954);
		System.out.println("发送信息");
		//发送货物
		ds.send(dp);
		ds.close();
		
	}
}

 

你可能感兴趣的:(java语言)