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();
		
	}
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值