上一篇文章介绍了基于 TCP 协议的 Socket 通信,本文介绍基于 UDP 协议的 Socket 通信,还是一个用户登录的例子。
UDP协议(用户数据报协议)是无连接、不可靠、无序的。
UDP协议以数据报作为数据传输载体。
进行数据传输时,首先要将要传输的数据定义成数据报(Datagram),在数据报中指明所要达到的 Socket(主机地址和端口),然后再将数据报发送出去。
相关操作类:
DatagramPacket:表示数据报包
DatagramSocket:进行端到端通信的类
1、Datagram 构造方法
2、DatagramPacket 成员方法
1、DatagramSocket 构造器
2、DatagramSocket 成员方法
1、Server.java
2、ServerThread.java
3、Client.java
1、先运行 Server 类
2、再运行 Client 类
服务器端界面
客户端界面
3、再启动一个 Client 类
服务器端界面
本文参考慕课网
本文地址:https://liuyanzhao.com/6924.html
UDP协议(用户数据报协议)是无连接、不可靠、无序的。
UDP协议以数据报作为数据传输载体。
进行数据传输时,首先要将要传输的数据定义成数据报(Datagram),在数据报中指明所要达到的 Socket(主机地址和端口),然后再将数据报发送出去。
相关操作类:
DatagramPacket:表示数据报包
DatagramSocket:进行端到端通信的类
DatagramPacket 构造器和成员方法
1、Datagram 构造方法
2、DatagramPacket 成员方法
DatagramSocket 构造器和成员方法
1、DatagramSocket 构造器
2、DatagramSocket 成员方法
一个服务端和支持多个客户端的对话demo
1、Server.java
- package com.liuyanzhao.udp;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- /**
- * @author 言曌
- * @date 2017/12/4 下午9:38
- */
- public class Server {
- public static void main(String[] args) throws IOException {
- DatagramSocket socket = new DatagramSocket(8888);
- byte[] data = new byte[1024];
- DatagramPacket packet;
- packet = new DatagramPacket(data, data.length);
- System.out.println("服务器已启动");
- while (true){
- socket.receive(packet);//在接收到数据包之前一直阻塞
- ServerThread thread = new ServerThread(socket, packet);
- thread.run();
- }
- }
- }
2、ServerThread.java
- package com.liuyanzhao.udp;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- /**
- * @author 言曌
- * @date 2017/12/4 下午10:24
- */
- public class ServerThread implements Runnable {
- private DatagramSocket socket;
- private DatagramPacket packet;
- public ServerThread(DatagramSocket socket, DatagramPacket packet) {
- this.socket = socket;
- this.packet = packet;
- }
- @Override
- public void run() {
- byte[] data = packet.getData();
- String info = new String (data, 0, packet.getLength());
- System.out.println("我是服务器,客户端说:" + info);
- InetAddress address = packet.getAddress();
- int port = packet.getPort();
- byte[] data2 = "欢迎您!".getBytes();
- DatagramPacket reply = new DatagramPacket(data2, data2.length, address, port);
- try {
- socket.send(reply);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
3、Client.java
- package com.liuyanzhao.udp;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- /**
- * 客户端
- * @author 言曌
- * @date 2017/12/4 下午9:44
- */
- public class Client {
- public static void main(String args[]) throws IOException {
- //1、定义服务器的地址、端口号、数据
- InetAddress address = InetAddress.getByName("localhost");
- int port = 8888;
- byte[] data = "用户名:admin;密码:123456".getBytes();
- //2、创建数据报
- DatagramPacket packet = new DatagramPacket(data,data.length,address,port);
- //3、创建DatagramSocket对象
- DatagramSocket socket = new DatagramSocket();
- //4、向服务器端发送数据
- socket.send(packet);
- /**
- * 接受服务器端的响应的数据
- */
- //1、创建数据报,用于接受服务器响应的数据
- byte[] data2 = new byte[1024];
- DatagramPacket packet2 = new DatagramPacket(data2,data2.length);
- //2、接受服务器响应的数据
- socket.receive(packet2);
- //3、读取服务器端响应的数据
- String reply = new String(data2,0,packet2.getLength());
- System.out.println("我是客户端,服务器说:"+reply);
- //4、关闭资源
- socket.close();
- }
- }
运行效果
1、先运行 Server 类
2、再运行 Client 类
服务器端界面
客户端界面
3、再启动一个 Client 类
服务器端界面
本文参考慕课网
本文地址:https://liuyanzhao.com/6924.html
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏