UDP

UDP socket 
这种信息传输方式相当于传真,信息打包,在接受端准备纸。
特点:
1) 基于UDP无连接协议 
2) 不保证消息的可靠传输 
3) 它们由Java技术中的DatagramSocket和DatagramPacket类支持
DatagramSocket(邮递员):对应数据报的Socket概念,不需要创建两个socket,不可使用输入输出流。
DatagramPacket(信件):数据包,是UDP下进行传输数据的单位,数据存放在字节数组中,其中包括了目标地址和端口以及传送的信息(所以不用建立点对点的连接)。
DatagramPacket的分类:

用于接收:

    DatagramPacket(byte[] buf, int length)
    DatagramPacket(byte[] buf, int offset,int length)
用于发送:

    DatagramPacket(byte[] buf, int length, InetAddress address,int port )
    DatagramPacket(byte[] buf, int offset, int length, InetAddress address,int port)
注:InetAddress类网址用于封装IP地址
没有构造方法,通过
InetAddress.getByAddress(byte[] addr):InetAddress
InetAddress.getByName(String host):InetAddress
 

UDP Server步骤
1、创建“信箱”:创建一个DatagramSocket(port)
2、创建“收信封”:创建一个DatagramPacket(buffer,len) buffer数组 len长度
3、接收数据:receive(DatagramPacket)
4、获取发信者的地址、端口
5、创建“发信封”:创建一个DatagramPacket(buffer,length,clientAddress,clientPort)
6、发送数据:send

UDP Client步骤
1、创建“信箱”:创建一个DatagramSocket(port) port可以跟Server的不一样
2、创建“发信封”:创建一个DatagramPacket(buffer,len,Serveraddr,serverport)
3、发送数据:send
4、创建“收信封”:创建一个DatagramPacket(buffer,len)
5、接收数据:receive

server:

DatagramSocket ds=null;
DatagramPacket packetIn;
DatagramPacket packetOut;
byte[] bufferIn=new byte[128];
try {
	//1、创建信箱
	ds=new DatagramSocket(8080);
	while(true){
		//2、创建收信封
		packetIn=new DatagramPacket(bufferIn, bufferIn.length);
		//3、收信
		ds.receive(packetIn);
		//4、对收到的数据做处理
		String str=new String(bufferIn);
		str=str.toUpperCase();
		//5、创建发信封
		packetOut=new DatagramPacket(str.getBytes(),str.getBytes().length,packetIn.getAddress(),packetIn.getPort());
		//6、发信
		ds.send(packetOut);
	}
} catch (Exception e) {
	e.printStackTrace();
}finally{
	if(ds!=null)ds.close();
}

client: 

byte[] buffer;
byte[] bufferIn=new byte[128];
DatagramSocket ds=null;
DatagramPacket packetOut;
DatagramPacket packetIn;
try {
	//1、创建信箱
	ds=new DatagramSocket(9090);
	//获取要发送的数据
	BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
	String str=br.readLine();
	buffer=str.getBytes();
	//2、创建发信封
	packetOut=new DatagramPacket(buffer,buffer.length,InetAddress.getByName("127.0.0.1"),8080);
	//3、发信
	ds.send(packetOut);
	//4、创建收信封
	packetIn=new DatagramPacket(bufferIn,buffer.length);
	//5、接收数据
	ds.receive(packetIn);
	System.out.println(new String(bufferIn,0,buffer.length));
} catch (Exception e) {
	e.printStackTrace();
} finally{
	if(ds!=null)ds.close();
}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值