IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Socket编程-UDP方式 -> 正文阅读

[网络协议]Socket编程-UDP方式

目录

基于UDP的Socket通信

编码

SocketServerUDP

SocketThreadUDP

SocketClientUDP

演示


基于UDP的Socket通信

Socket除了支持TCP协议,也支持UDP协议。

编码

SocketServerUDP

package com.ispeasant.socket.udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class SocketServerUDP {
    public static void main(String[] args) {

        try {
            // UDP方式,采用的是DatagramSocket,与TCP是有点不一样
            DatagramSocket udpSocket = new DatagramSocket(8888);
            System.out.println("----UDP服务端启动----");

            // UDP方式,接收客户端发送过来的数据,也是有点不一样
            DatagramPacket packetClient = null;
            byte[] dataClient = null;

            // 为了更方便测试,我们让服务端程序一直启动
            while (true) {
                // 设定数据包的大小
                dataClient = new byte[1024];
                packetClient = new DatagramPacket(dataClient, dataClient.length);

                // 接收数据
                udpSocket.receive(packetClient);

                // 采用多线程来处理数据
                Thread thread = new Thread(new SocketThreadUDP(udpSocket, packetClient));
                thread.start();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}

SocketThreadUDP

package com.ispeasant.socket.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SocketThreadUDP implements Runnable {
    DatagramSocket socketUDP = null;
    DatagramPacket packetUDP = null;

    public SocketThreadUDP(DatagramSocket socketUDP, DatagramPacket packetUDP) {
        this.socketUDP = socketUDP;
        this.packetUDP = packetUDP;
    }

    @Override
    public void run() {
        // 客户端发过来的信息,是通过从packet里获取
        String info = new String(packetUDP.getData(), 0, packetUDP.getLength());

        // 加个时间戳,更好区分
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
        Date date = new Date(System.currentTimeMillis());

        System.out.println(date + "客户端:" + info);

        // 因为采用的是UDP方式,不像TCP那样有握手建立通信通道,所以我们向客户端返回信息时,是需要制定ip和端口
        // 而这ip和端口信息,是可以通过packet来获取
        // 向客户端发送信息
        String server2Client = "我是服务端" + date;
        byte[] data = server2Client.getBytes();
        try {
            socketUDP.send(new DatagramPacket(data, data.length, packetUDP.getAddress(), packetUDP.getPort()));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

SocketClientUDP

package com.ispeasant.socket.udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SocketClientUDP {
    public static void main(String[] args) {
        // 发送给服务端的信息
        String info = "你好,我是客户端";
        byte[] data = info.getBytes();

        try {
            // 通过packet来打包数据发送给服务端
            DatagramPacket clientPacket = new DatagramPacket(data, data.length, InetAddress.getByName("localhost"), 8888);
            // 通过DatagramSocket负责与服务端通信
            DatagramSocket socket = new DatagramSocket();
            socket.send(clientPacket);

            // 向服务端发送完数据后,我们可以看看服务端有没有信息返回给我们
            byte[] serverData = new byte[1024];
            DatagramPacket serverPacket = new DatagramPacket(serverData, serverData.length);
            socket.receive(serverPacket);

            // 接收到的服务端信息
            String server2Client = new String(serverData,0,serverPacket.getLength());

            // 加个时间戳,更好区分
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
            Date date = new Date(System.currentTimeMillis());

            System.out.println(date + ",服务端:" + server2Client);

            // 关闭sokcet
            socket.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

演示

先启动SocketServerUDP程序:

接着启动SocketClientUDP程序:

我们再回到SocketServerUDP程序的控制台,看看有没有收到客户端的信息:

因此,Socket的UDP方式通信,也是成功的。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 12:22:55  更:2021-12-07 12:23:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/8 10:21:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码