您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
javase第三季学习笔记-网络编程UDP协议
发布时间:2017-08-10 16:07:12编辑:雪饮阅读()
UDP 协议概述
UDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个
独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目
的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证
的,每个被传输的数据报必须限定在64KB之内。
主要使用以下的两个类:
• · DatagramPacket:此类表示数据报包。
• · DatagramSocket:此类表示用来发送和接收数据报包的套接字
UDP 服务器与客户端程序
服务器端:
o = “ ” • String info = ….
• // 将信息封装成数据报
• byte[] bytes = info.getBytes();
D k D k b 0 b • DatagramPacket dp = new DatagramPacket(bytes, 0, bytes
• .length(), InetAddress.getByName("localhost"), 5000);// 客户端在5000端口监听
• DatagramSocket server = new DatagramSocket(3000);// 服务器的端口
d ) • server.send(dp);// 发送数据报
• server.close()
客户端:
] • byte b[] = new byte[1024];// 接收内容
• DatagramPacket dp = new DatagramPacket(b, b.length);// 接收内容
• DatagramSocket client = new DatagramSocket(5000);// 客户端在5000端口等待
d ) • client.receive(dp); // 接收内容(会造成阻塞)
• System.out.println(new String(dp.getData(), 0, dp.getLength()));
• client.close();
示例代码:
服务端:
package com.vince.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPServerDemo {
//udp发送端
public static void main(String[] args) throws IOException {
String info="再深沉的感情,再真挚的牵挂,还是会有分开的一天……到头来又怎么敌得过生离死别……";
//把数据转换成字节数组
byte[] bytes=info.getBytes();
/*
DatagramPacket构造方法参数说明:
字节数组
起始位置(偏移量,即索引)
发送长度(要发送数组的长度)
目标地址
目标地址对应的端口
*/
DatagramPacket data=new DatagramPacket(bytes,0,bytes.length,InetAddress.getByName("192.168.1.109"),5000);
//创建一个UDP协议的Socket对象
//这里指定了发送方当前程序端口为3000
DatagramSocket ds=new DatagramSocket(3000);
ds.send(data);
System.out.println("发送完毕!");
}
}
客户端:
package com.vince.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
//udp接收端
public class UDPClientDemo {
public static void main(String[] args) throws IOException {
//创建一个数据报对象,数据最大64k,这里在64k内可以自定义容量的,如这里指定接收数据最大为1024即1k
byte[] bytes=new byte[1024];
DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
//创建UDP协议的Socket对象
//这里指定5000为接收端应用程序监听端口
//使用上面创建的数据报对象结合UDP协议的Socket对象来接收数据
DatagramSocket ds=new DatagramSocket(5000);
System.out.println("客户端正在等待接收数据。。。");
ds.receive(dp);//接收数据(该方法会造成阻塞)
//数据报对象获取到数据后,可以从此对象中再次取出数据然后对数据进行其它业务逻辑处理,如下面是利用数据报对象中取出的数据来创建字符串
String info=new String(dp.getData(),0,dp.getLength());
System.out.println(info);
ds.close();
}
}
先运行客户端,只有客户端监听了对应端口,那么服务端向该端口发送才会被监听到。
关键字词:javase,网络编程UDP协议