博主分享免费Java教学视频,B站账号:Java刘哥
上一篇文章介绍了基于 TCP 协议的 Socket 通信,本文介绍基于 UDP 协议的 Socket 通信,还是一个用户登录的例子。
UDP协议(用户数据报协议)是无连接、不可靠、无序的。
UDP协议以数据报作为数据传输载体。
进行数据传输时,首先要将要传输的数据定义成数据报(Datagram),在数据报中指明所要达到的 Socket(主机地址和端口),然后再将数据报发送出去。
相关操作类:
DatagramPacket:表示数据报包
DatagramSocket:进行端到端通信的类
2、ServerThread.java
3、Client.java
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();
- }
- }
- }
- 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();
- }
- }
- }
- 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- 微信
- 交流学习,有偿服务
- 博客/Java交流群
- 资源分享,问题解决,技术交流。群号:590480292
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏