网络编程UDP的一些基本操作应用

来源:互联网 发布:js 24小时时间轴控件 编辑:程序博客网 时间:2024/06/16 18:12

UDP的特点
1、将数据及源和目的封装为数据包,不需要建立连接
2、每个包数据的大小限制为64k
3、因为无连接,所以是不可靠的协议
4、不需要建立连接速度快

UDP的应用
qq聊天、网络视频。
udp简单演示

示例1

udp的接收端

<span style="font-size:18px;"><span style="font-size:18px;">import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.SocketException;class UDP_Rece_Demo01 {<span style="color:#33cc00;">/** * 定义一个应用程序,用于接受udp协议传输的数据并处理 *  * 思路: * 1、定义udpsocket服务,通常会监听一个端口,其实就是给这个接受网咯应用程序定义一个数字标识 * 方便于明确哪些数据过来该应用程序可以处理 * 2、定义一个数据包,因为要存储接受到的字节数据, * 因为数据包种有更多的功能提取字节数据中的不同数据信息 * 3、通过socket服务的receive方法将收到的数据存入已定义好的数据包中 * 4、通过数据包中的特有功能,将不同的数据取出,打印在控制台上 * 5、关闭资源 * @throws IOException  */</span>public static void main(String[] args) throws IOException {<span style="color:#33cc00;">//第一步:创建udp socket,建立端点</span>DatagramSocket ds=new DatagramSocket(10000);<span style="color:#33cc00;">//指定监听端口</span><span style="color:#009900;">//2、定义数据包,用于存储数据。</span>byte [] b=new byte[1024];DatagramPacket dp=new DatagramPacket(b,b.length);<span style="color:#009900;">//3、通过服务的receive方法将接受到的数据存入到数据包中</span>ds.receive(dp);<span style="color:#33cc00;">//4、通过数据包的方法获取其中的数据</span>String ip=dp.getAddress().getHostAddress();String data=new String(dp.getData(),0,dp.getLength());int port=dp.getPort();System.out.println(ip+"---"+data+"----"+port);<span style="color:#33cc00;">//5、关闭资源</span>ds.close();}}</span></span>
udp的发送端

<span style="font-size:18px;"><span style="font-size:18px;">import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;<span style="color:#33cc00;">/** * 需求,通过udp传输方式,将一段文字数据发送出去  * 思路 1、建立udpSocket服务 2、提供数据,并将数据封装到数据包中去 * 3、通过Socket服务的发送功能,将数据包发送出去 4、关闭资源 */</span>public class UDP_Send_Demo01 {public static void main(String[] args) throws Exception {<span style="color:#33cc00;">// 1、创建udp服务,通过DaragramSocket对象</span>DatagramSocket ds = new DatagramSocket(8888);<span style="color:#33cc00;">// 指定发送端口</span><span style="color:#009900;">// 2、确定数据,并封装成数据包</span>,byte[] buf = "今天十很好的天气".getBytes();<span style="color:#33cc00;">// 数据</span>DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getByName("10.144.243.11"), 10000);<span style="color:#33cc00;">// 参数一:数据,参数二:数据长度,参数三:指定目的地的ip地址,参数四:端口号</span><span style="color:#33cc00;">// 3、通过socket服务,建议有的数据包发送出去,通过send()方法</span>ds.send(dp);<span style="color:#33cc00;">// 4、关闭资源</span>ds.close();}}</span></span>
示例2

udp发送端

<span style="font-size:18px;"><span style="font-size:18px;">import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;public class UDP_Send_Demo02 {<span style="color:#33cc00;">/** * udp发送端02 *  * @throws IOException */</span>public static void main(String[] args) throws IOException {DatagramSocket ds = new DatagramSocket();BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));String s = null;while ((s = bReader.readLine()) != null) {<span style="color:#33cc00;">//循环输入数据发送给接收端当输入over时结束</span>if ("over".equals(s)) {break;}<span style="color:#33cc00;">// 将字符串转换为字节数组</span>byte[] buf = s.getBytes();DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getByName("10.144.243.11"), 10002);ds.send(dp);}ds.close();}}</span></span>
udp的接收端

<span style="font-size:18px;"><span style="font-size:18px;">import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.SocketException;<span style="color:#33cc00;">/** * udp接受端02 */</span>public class UDP_Rece_Demo02 {public static void main(String[] args) throws IOException {DatagramSocket ds=new DatagramSocket(10002);while (true) {<span style="color:#33cc00;">//循环接受发送端发过来的数据</span> byte [] buf=new byte[1024]; DatagramPacket dp=new DatagramPacket(buf, buf.length); ds.receive(dp);  String ip=dp.getAddress().getHostAddress();<span style="color:#009900;">//获取ip地址</span> String data=  new String(dp.getData(),0,dp.getLength()) ;  System.out.println(ip+"-------------"+data);}}}</span></span>

示例3
udp练习

<span style="font-size:18px;"><span style="font-size:18px;">package 网络编程;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;<span style="color:#33cc00;">/** * 编写一个聊天小程序, 有接收数据的部分,和发送数据的部分  * 这两部分需要同时执行,就需要用到多线程技术  * 一个用来控制接受,一个用来控制发送 */</span><span style="color:#33cc00;">// 发送端</span>class Send implements Runnable {private DatagramSocket ds;//定义一个public Send(DatagramSocket ds) {<span style="color:#33cc00;">//定义一个构造方法,一初始化,就必须传送一个DatagramSocket对象</span>this.ds = ds;}public void run() {BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));<span style="color:#33cc00;">//从键盘输入数据再将数据转换为字符流再加入字符流缓冲区</span>String s = null;try {while ((s = bReader.readLine()) != null) {<span style="color:#33cc00;">//循环读取键盘数据</span>if ("886".equals(s)) {System.out.println("sdfs");break;}DatagramPacket dp = new DatagramPacket(s.getBytes(),s.length(), InetAddress.getByName("10.144.243.11"),10002);ds.send(dp);}bReader.close();ds.close();} catch (Exception e) {e.printStackTrace();}}}<span style="color:#33cc00;">// 接收端</span>class Rece implements Runnable {private DatagramSocket ds;public Rece(DatagramSocket ds) {this.ds = ds;}public void run() {while (true) {try {byte[] b = new byte[1024];DatagramPacket dp = new DatagramPacket(b, b.length);ds.receive(dp);String ip = dp.getAddress().getHostAddress();String data = new String(dp.getData(), 0, dp.getLength());System.out.println(ip + "----------------" + data);} catch (Exception e) {e.printStackTrace();}}}}public class UDP_Demo01 {public static void main(String[] args) throws Exception {DatagramSocket send = new DatagramSocket();DatagramSocket rece = new DatagramSocket(10002);<span style="color:#33cc00;">//同时开启两个线程</span>new Thread(new Send(send)).start();new Thread(new Rece(rece)).start();}}</span></span>




0 0
原创粉丝点击