java实现UDP数据交互

1、回显服务器

服务器端

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UDP_Server {
    private DatagramSocket socket=null;
    public UDP_Server(int port) throws SocketException {
        //手动指定端口
        socket=new DatagramSocket(port);
        //系统自动分配端口
        /*socket=new DatagramSocket();*/
    }
    public void start() throws IOException {
        //start方法启动服务器
        System.out.println("服务器启动");
        while (true){
            //1.读取请求
            DatagramPacket requestPacket=new DatagramPacket(new byte[2000],2000);
            socket.receive(requestPacket);
            //receive 后接收到的是二进制,需要转成字符串
            String request=new String(requestPacket.getData(),0,requestPacket.getLength());
            //2.根据请求计算响应,由于这里是回显服务器所以原样子返回
            String response=process(request);
            //3.把响应返回客户端,在DatagramPacket构造在send返回
            DatagramPacket reponsePacket=new DatagramPacket(response.getBytes(), response.getBytes().length,
                    requestPacket.getSocketAddress());
            socket.send(reponsePacket);
            //4.打印日志,交互详情
            System.out.printf("[%s:%d]req:%s,resp=%s\n",requestPacket.getAddress().toString(),requestPacket.getPort(),request,response);
        }
    }

    private String process(String request) {
        return  request;
    }

    public static void main(String[] args) throws IOException {
        UDP_Server udpServer=new UDP_Server(900);
        udpServer.start();
    }
}

客户端

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class UDP_Client {
    private DatagramSocket socket=null;
    private String serverIp;
    private int serverPort;
    public UDP_Client(String ip,int port) throws SocketException {
        //创建对象,不能手动指定窗口
        socket=new DatagramSocket();
        //把对端的情况记录下来
        serverIp=ip;
        serverPort=port;
    }
    public void start() throws IOException {
        System.out.println("客户端启动");
        Scanner scanner=new Scanner(System.in);
        while (true){
            //1。从控制台读取数据,作为请求
            System.out.print("->");
            String request=scanner.next();
            //2.把请求内容构造成DatagramPacket对象,发给服务器
            DatagramPacket requestPacket=new DatagramPacket(request.getBytes(),request.getBytes().length,
                    InetAddress.getByName(serverIp),serverPort);
            socket.send(requestPacket);
            //3.读取服务器返回信息
            DatagramPacket responsePacket=new DatagramPacket(new byte[2000],2000);
            socket.receive(responsePacket);
            //4.转换成字符串输出
            String reponse=new String(responsePacket.getData(),0, responsePacket.getLength());
            System.out.println(reponse);
        }
    }

    public static void main(String[] args) throws IOException {
        UDP_Client udpClient=new UDP_Client("127.0.0.1",900);
        udpClient.start();
    }
}

 

 

2、翻译服务器

服务器端

import java.util.Map;

public class UDP_translate_Server extends UDP_Server{
    private Map<String,String> map=new HashMap<>();
    public UDP_translate_Server(int port) throws SocketException {
        super(port);
        map.put("小狗","dog");
        map.put("小猫","cat");
        map.put("小猪","pig");
        map.put("小老鼠","mouse");
    }

    @Override
    public String process(String request) {
        return map.get(request);
    }

    public static void main(String[] args) throws IOException {
        UDP_translate_Server test=new UDP_translate_Server(900);
        test.start();
    }
}


客户端 

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class UDP_Client {
    private DatagramSocket socket=null;
    private String serverIp;
    private int serverPort;
    public UDP_Client(String ip,int port) throws SocketException {
        //创建对象,不能手动指定窗口
        socket=new DatagramSocket();
        //把对端的情况记录下来
        serverIp=ip;
        serverPort=port;
    }
    public void start() throws IOException {
        System.out.println("客户端启动");
        Scanner scanner=new Scanner(System.in);
        while (true){
            //1。从控制台读取数据,作为请求
            System.out.print("->");
            String request=scanner.next();
            //2.把请求内容构造成DatagramPacket对象,发给服务器
            DatagramPacket requestPacket=new DatagramPacket(request.getBytes(),request.getBytes().length,
                    InetAddress.getByName(serverIp),serverPort);
            socket.send(requestPacket);
            //3.读取服务器返回信息
            DatagramPacket responsePacket=new DatagramPacket(new byte[2000],2000);
            socket.receive(responsePacket);
            //4.转换成字符串输出
            String reponse=new String(responsePacket.getData(),0, responsePacket.getLength());
            System.out.println(reponse);
        }
    }

    public static void main(String[] args) throws IOException {
        UDP_Client udpClient=new UDP_Client("127.0.0.1",900);
        udpClient.start();
    }
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/527495.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工地安全监测识别摄像机

工地安全监测识别摄像机是一种在建筑工地和施工现场广泛使用的智能监控设备&#xff0c;主要用于监测施工过程中可能出现的安全隐患和违规行为&#xff0c;以确保工地人员和设备的安全。通过高清摄像头、智能算法和远程监控系统的结合&#xff0c;该摄像机可以实时监测工地各个…

4.8作业

1、使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是…

Qt | Q_PROPERTY属性和QVariant 类

一、属性基础 1、属性与数据成员相似,但是属性可使用 Qt 元对象系统的功能。他们的主要差别在于存取方式不相同,比如属性值通常使用读取函数(即函数名通常以 get 开始的函数)和设置函数(即函数名通常以 set 开始的函数)来存取其值,除此种方法外,Qt 还有其他方式存取属性值…

EditPlus来啦(免费使用!)

hello&#xff0c;我是小索奇 今天推荐一款编辑器&#xff0c;是索奇学习JavaSE时入手滴&#xff0c;非常好用哈&#xff0c;小索奇还是通过老杜-杜老师入手滴&#xff0c;相信很多人也是通过老杜认识嘞&#xff0c;来寻找破解版或者准备入手这个间接使用的编辑器~ EditPlus是…

Ubuntu22.04修改默认窗口系统为X11

Ubuntu22.04安装默认窗口系统为Wayland&#xff08;通过设置->关于可以看到&#xff09;。 一、用Ubuntu on Xorg会话登录 用户登录时&#xff0c;点“未列出”&#xff0c;输入用户名后&#xff0c;在登录界面底部的齿轮图标中&#xff0c;选择 "Ubuntu on Xorg&quo…

windows下使用ZLMediaKit-API+FFmpeg+opengl拉取解码播放流媒体

ZLMediaKit简介 ZLMediaKit是一个基于C11的高性能运营级流媒体服务框架&#xff0c;和SRS类似&#xff0c;功能强大&#xff0c;性能优异&#xff0c;提供多种支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/…

解决idea种maven依赖时明明有包,但是一直提示 Cannot resolve com.grandtech:gny-common:0.0.7

1、先看提示问题 &#xff0c;Cannot resolve com.grandtech:gny-common:0.0.7&#xff0c; 2、依赖我也是是没有问题 3、在maven库中的包也是要来的新的别人能运行的。但是放进去就是无法解析。 解决办法&#xff1a;在idea中直接&#xff0c;用mvn命令装载&#xff1a; ①…

设计模式浅析(十一) ·状态模式

设计模式浅析(十一) 状态模式 日常叨逼叨 java设计模式浅析&#xff0c;如果觉得对你有帮助&#xff0c;记得一键三连&#xff0c;谢谢各位观众老爷&#x1f601;&#x1f601; 状态模式 概念 状态模式 Java中的状态模式&#xff08;State Pattern&#xff09;是一种行为型…

Vue3中对v-md-editor编辑器的集成使用

效果展示&#xff1a; 首先安装需要的包 npm i kangc/v-md-editornext -S 在main.js中进行全局配置 import VMdEditor from kangc/v-md-editor/lib/codemirror-editor; import kangc/v-md-editor/lib/style/codemirror-editor.css; import githubTheme from kangc/v-md-ed…

学透Spring Boot — 005. 深入理解 Spring Boot Starter 依赖管理

前面的文章直观的展示了&#xff0c;使用Spring Boot 集成 Hibernate 和手动集成 Hibernate 之间差距。 一个比喻 工作中使用过Spring Boot一段时间后&#xff0c;我越来越感觉到Spring Boot Starter带来的便利性。 使用手动集成 Hibernate&#xff0c; 就像去电脑城配电脑&…

怎么防止文件被拷贝,复制别人拷贝电脑文件

怎么防止文件被拷贝&#xff0c;复制别人拷贝电,脑文件 防止文件被拷贝通常是为了保护敏感数据、知识产权或商业秘密不被未经授权的人员获取或传播。以下列出了一系列技术手段和策略&#xff0c;可以帮助您有效地防止文件被拷贝。 1. 终端管理软件&#xff1a; 如安企神、域智…

IP地址到底有什么用

IP地址在计算机网络中的作用至关重要&#xff0c;它不仅是设备在网络中的唯一标识&#xff0c;更是实现网络通信、网络管理和安全的关键要素。下面&#xff0c;我们将从多个方面详细阐述IP地址的作用。 首先&#xff0c;IP地址作为设备的唯一标识&#xff0c;为网络通信提供了…

ssm032基于Java的汽车客运站管理系统的设计与实现+jsp

汽车客运站管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对汽车客运站售票信息管理混乱&…

MP4视频如何转OGV视频格式?视频格式转换的方法

一&#xff0c;什么是OGV视频格式 OGV是一个使用OGG开源格式的容器。 OGG不受软件专利的限制&#xff0c;这是其创建的主要目标之一。 OGV格式用于存储带或不带音频的视频流&#xff0c;而视频流又可以用Opus&#xff0c;Vorbis&#xff0c;Theora或Speex算法压缩。该格式用于…

门电路知识点总结

目录 一、基本门电路 &#xff08;Gate Cricuit&#xff09; 1.与电路 2.或电路 3.非电路 二、复合门电路 &#xff08;Composite gate circuit&#xff09; 1.与非门 2.或非门 3.与或非门 4.异或门 5.同或门 三、CMOS门电路 (Complementary Metal-Oxide-Semiconduc…

J基于微信小程序的电影订票、电影购票小程序

文章目录 1 **摘 要**2 技术简介**3 系统功能设计****第4章 系统设计****4.1系统结构设计** 第5章 系统实现**5.1管理员服务端功能模块**5.2用户客户端功能模块 结 论6 推荐阅读7 源码获取&#xff1a; 1 摘 要 本文从管理员、用户的功能要求出发&#xff0c;电影订票系统小程…

PSO-SVM,基于PSO粒子群算法优化SVM支持向量机回归预测(多输入单输出)-附代码

PSO-SVM是一种结合了粒子群优化&#xff08;Particle Swarm Optimization, PSO&#xff09;算法和支持向量机&#xff08;Support Vector Machine, SVM&#xff09;的方法&#xff0c;用于回归预测问题。下面我将解释PSO-SVM的原理&#xff1a; 1、支持向量机&#xff08;SVM&a…

【SCI绘图】【热力图系列2 R】多特征相关性分析热力图指定聚类 R

SCI&#xff0c;CCF&#xff0c;EI及核心期刊绘图宝典&#xff0c;爆款持续更新&#xff0c;助力科研&#xff01; 本期分享&#xff1a; 【SCI绘图】【热力图系列2 R】多特征相关性分析热力图指定聚类 R 1.环境准备 library(gplots) library(RColorBrewer)2.数据读取 ###…

分类预测 | Matlab实现OOA-BP鱼鹰算法优化BP神经网络数据分类预测

分类预测 | Matlab实现OOA-BP鱼鹰算法优化BP神经网络数据分类预测 目录 分类预测 | Matlab实现OOA-BP鱼鹰算法优化BP神经网络数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现OOA-BP鱼鹰算法优化BP神经网络多特征分类预测&#xff08;完整源码和数…

OpenHarmony实战:Combo解决方案之W800芯片移植案例

本方案基于OpenHarmony LiteOS-M内核&#xff0c;使用联盛德W800芯片的润和软件海王星系列Neptune100开发板&#xff0c;进行开发移植。 移植架构采用Board与SoC分离方案&#xff0c;支持通过Kconfig图形化配置编译选项&#xff0c;增加玄铁ck804ef架构移植&#xff0c;实现了…