通过 Socket 实现 UDP 编程 入门

上一篇文章介绍了基于 TCP 协议的 Socket 通信,本文介绍基于 UDP 协议的 Socket 通信,还是一个用户登录的例子。

 

UDP协议(用户数据报协议)是无连接、不可靠、无序的。

UDP协议以数据报作为数据传输载体。

 

进行数据传输时,首先要将要传输的数据定义成数据报(Datagram),在数据报中指明所要达到的 Socket(主机地址和端口),然后再将数据报发送出去。

相关操作类:

DatagramPacket:表示数据报包

DatagramSocket:进行端到端通信的类

 

DatagramPacket 构造器和成员方法

1、Datagram 构造方法

通过 Socket 实现 UDP 编程 入门

 

2、DatagramPacket 成员方法

通过 Socket 实现 UDP 编程 入门

 

DatagramSocket 构造器和成员方法

1、DatagramSocket 构造器

通过 Socket 实现 UDP 编程 入门

 

2、DatagramSocket 成员方法

通过 Socket 实现 UDP 编程 入门

通过 Socket 实现 UDP 编程 入门

 

 

一个服务端和支持多个客户端的对话demo

1、Server.java

  1. package com.liuyanzhao.udp;
  2. import java.io.IOException;
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5. import java.net.InetAddress;
  6. /**
  7.  * @author 言曌
  8.  * @date 2017/12/4 下午9:38
  9.  */
  10. public class Server {
  11.     public static void main(String[] args) throws IOException {
  12.         DatagramSocket socket = new DatagramSocket(8888);
  13.         byte[] data = new byte[1024];
  14.         DatagramPacket packet;
  15.         packet = new DatagramPacket(data, data.length);
  16.         System.out.println("服务器已启动");
  17.         while (true){
  18.             socket.receive(packet);//在接收到数据包之前一直阻塞
  19.             ServerThread thread = new ServerThread(socket, packet);
  20.             thread.run();
  21.         }
  22.     }
  23. }

 

2、ServerThread.java

  1. package com.liuyanzhao.udp;
  2. import java.io.IOException;
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5. import java.net.InetAddress;
  6. /**
  7.  * @author 言曌
  8.  * @date 2017/12/4 下午10:24
  9.  */
  10. public class ServerThread implements Runnable {
  11.     private DatagramSocket socket;
  12.     private DatagramPacket packet;
  13.     public ServerThread(DatagramSocket socket, DatagramPacket packet) {
  14.         this.socket = socket;
  15.         this.packet = packet;
  16.     }
  17.     @Override
  18.     public void run() {
  19.         byte[] data = packet.getData();
  20.         String info = new String (data, 0, packet.getLength());
  21.         System.out.println("我是服务器,客户端说:" + info);
  22.         InetAddress address = packet.getAddress();
  23.         int port = packet.getPort();
  24.         byte[] data2 = "欢迎您!".getBytes();
  25.         DatagramPacket reply = new DatagramPacket(data2, data2.length, address, port);
  26.         try {
  27.             socket.send(reply);
  28.         } catch (IOException e) {
  29.             e.printStackTrace();
  30.         }
  31.     }
  32. }

 

3、Client.java

  1. package com.liuyanzhao.udp;
  2. import java.io.IOException;
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5. import java.net.InetAddress;
  6. /**
  7.  * 客户端
  8.  * @author 言曌
  9.  * @date 2017/12/4 下午9:44
  10.  */
  11. public class Client {
  12.     public static void main(String args[]) throws IOException {
  13.         //1、定义服务器的地址、端口号、数据
  14.         InetAddress address = InetAddress.getByName("localhost");
  15.         int port = 8888;
  16.         byte[] data = "用户名:admin;密码:123456".getBytes();
  17.         //2、创建数据报
  18.         DatagramPacket packet = new DatagramPacket(data,data.length,address,port);
  19.         //3、创建DatagramSocket对象
  20.         DatagramSocket socket = new DatagramSocket();
  21.         //4、向服务器端发送数据
  22.         socket.send(packet);
  23.         /**
  24.          * 接受服务器端的响应的数据
  25.          */
  26.         //1、创建数据报,用于接受服务器响应的数据
  27.         byte[] data2 = new byte[1024];
  28.         DatagramPacket packet2 = new DatagramPacket(data2,data2.length);
  29.         //2、接受服务器响应的数据
  30.         socket.receive(packet2);
  31.         //3、读取服务器端响应的数据
  32.         String reply = new String(data2,0,packet2.getLength());
  33.         System.out.println("我是客户端,服务器说:"+reply);
  34.         //4、关闭资源
  35.         socket.close();
  36.     }
  37. }

 

运行效果

1、先运行 Server 类

通过 Socket 实现 UDP 编程 入门

 

2、再运行 Client 类

服务器端界面

通过 Socket 实现 UDP 编程 入门

 

客户端界面

通过 Socket 实现 UDP 编程 入门

 

3、再启动一个 Client 类

服务器端界面

通过 Socket 实现 UDP 编程 入门

 

 

本文参考慕课网

本文地址:https://liuyanzhao.com/6924.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半缘修道半缘君丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值