使用spring boot实现项目启动时的监听,

UDPListener


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


import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class UDPListener implements ServletContextListener { public static final int MAX_UDP_DATA_SIZE = 4096;
public static final int UDP_PORT = 26666; @Override
public void contextInitialized(ServletContextEvent sce) { System.out.println("========UDPListener Initialized=========");
try {
       // 启动一个线程,监听UDP数据报
new Thread(new UDPProcess(UDP_PORT)).start();
} catch (Exception e) {
e.printStackTrace();
} } class UDPProcess implements Runnable {
DatagramSocket socket = null; public UDPProcess(final int port) throws SocketException {
socket = new DatagramSocket(port);
} @Override
public void run() {
// TODO Auto-generated method stub
System.out.println("=======UDPProcess======");
while (true) {
byte[] buffer = new byte[MAX_UDP_DATA_SIZE];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
try {
socket.receive(packet);
new Thread(new Process(packet)).start();
} catch (IOException e) {
e.printStackTrace();
}
} }
} class Process implements Runnable { public Process(DatagramPacket packet) throws UnsupportedEncodingException {
// TODO Auto-generated constructor stub
byte[] buffer = packet.getData();// 接收到的UDP信息,然后解码
String srt1 = new String(buffer,"GBK").trim();
String srt2 = new String(buffer, "UTF-8").trim();
String srt3 = new String(buffer,"ISO-8859-1").trim();
System.out.println("=======Process srt1 GBK======" + srt1);
System.out.println("=======Process srt2 UTF-8======" + srt2);
System.out.println("=======Process srt3 ISO-8859-1======" + srt3);
} @Override
public void run() {
// TODO Auto-generated method stub
System.out.println("====Process run=====");
} } @Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("========UDPListener Destroyed=========");
} }

DemoApplication

@SpringBootApplication
@ServletComponentScan
public class DemoApplication { public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@ServletComponentScan Servlet扫描,启动时把servlet、filter、listener自动扫描注入

UDP测试客户端(也可以用测试工具发送UDP包测试):

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

public class UDPClientTest {

    public static final String SERVER_HOSTNAME = "localhost";
// 服务器端口
public static final int SERVER_PORT = 26666;
// 本地发送端口
public static final int LOCAL_PORT = 8888; public static void main(String[] args) {
try {
// 1,创建udp服务。通过DatagramSocket对象。
DatagramSocket socket = new DatagramSocket(LOCAL_PORT);
// 2,确定数据,并封装成数据包。DatagramPacket(byte[] buf, int length, InetAddress
// address, int port)
byte[] buf = "你好,世界".getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName(SERVER_HOSTNAME),
SERVER_PORT);
// 3,通过socket服务,将已有的数据包发送出去。通过send方法。
socket.send(dp);
// 4,关闭资源。
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
} }

结果:

												

java ServletContextListener 实现UDP监听的更多相关文章

  1. java多个listener监听

    java 多个listener 监听方法 在class 名称上一行添加@Listeners 括号中用逗号隔开 @Listeners({com.example.MyListener.class,com. ...

  2. Java中的事件监听机制

    鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动 ...

  3. java Gui编程 事件监听机制

    1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式:   1. 命令交互方式    图书管理系统 ...

  4. Java界面编程—事件监听机制

    组件首先要先注册事件处理器,当用户单击组件.移动鼠标或者敲击键盘时都会产生事件(Event),一旦有时间发生,应用程序就会做出对该事件的响应,这些组件就是事件源(Event source). 接受.解 ...

  5. Java实现系统目录实时监听更新。

    SDK1.7新增的nio WatchService能完美解决这个问题.美中不足是如果部署在window系统下会出现莫名其妙的文件夹占用异常导致子目录监听失效,linux下则完美运行.这个问题着实让人头 ...

  6. Java 中的事件监听机制

    看项目代码时遇到了好多事件监听机制相关的代码.现学习一下: java事件机制包含三个部分:事件.事件监听器.事件源. 1.事件:继承自java.util.EventObject类,开发人员自己定义. ...

  7. Java Spring 自定义事件监听

    ApplicationContext 事件 定义一个context的起动监听事件 import org.springframework.context.ApplicationListener; imp ...

  8. 请描述Java中的时间监听机制?

    1.时间监听涉及到三个组件:事件源.事件对象.事件监听器 2.当事件源上发生某个动作时,它会调用事件监听器的一个方法,并将事件对象穿进去,开发人员在监听器中通过事件对象,拿到事件源,从而对事件源进行操 ...

  9. Java监听器中ServletRequestListener监听Request的创建和销毁

    ServletRequest和HttpServletRequest的区别 HttpServletRequest和ServletRequest都是接口,HttpServletRequest继承自Serv ...

随机推荐

  1. redis的简介和使用

    简介 redis(Remote Dictionary Server)是一种Nosql技术,它是一个开源的高级kv存储和数据结构存储系统,它经常被拿来和Memcached相比较,但是Memcached不 ...

  2. 常见的几个Qt编程问题的处理(转自QT中文论坛)(挺实用的)

    1.如何在窗体关闭前自行判断是否可关闭答:重新实现这个窗体的closeEvent()函数,加入判断操作 void MainWindow::closeEvent(QCloseEvent*event){i ...

  3. 桌面程序阻止Windows关机(使用Message.Result取得DefWindowProc API函数的返回值,非常重要)

    Windows Client 客户端在关机,不外乎两种情况: 1. 没有处理 Windows 关机消息: 2.处理了关机消息,但是超时了: 上面这两种情况,都会让Windows 关不了机.在现实生活中 ...

  4. CrashRpt_v.1.4.2_vs2008_also_ok

    1.windows多线程程序release版崩溃记录工具,便于该如何查找错误. 2.此工具主要用来配置windbug工具,一种排查程序发布版本崩溃这种非常难处理的缺陷的方法,非常棒,amazing! ...

  5. 解决socket.error: [Errno 98] Address already in use问题

    如果python中socket 绑定的地址正在使用,往往会出现错误, 在linux下: 则会显示“ socket.error: [Errno 98] Address already in use” 在 ...

  6. SpringCloud系列——TX-LCN分布式事务管理

    前言 SpringCloud分布式架构给我们带来开发上的便利,同时增加了我们对事务管理的难度,微服务的遍地开花,本地事务已经无法满足分布式的要求,由此分布式事务问题诞生. 分布式事务被称为世界性的难题 ...

  7. SYN1621型 定位定向授时设备

    SYN1621型 定位定向授时设备 定位定向授时设备使用说明视频链接: http://www.syn029.com/h-pd-274-0_310_39_-1.html 请将此链接复制到浏览器打开观看 ...

  8. python常用数据结构(2)

    1.有名字的元组——namedtuple >>> from collections import namedtuple >>> Point = namedtuple ...

  9. Docker环境下的前后端分离项目部署与运维(十一)Docker Swarm技术

    Docker Swarm技术 docker swarm技术(之前的docker集群都是在 一个虚拟主机上的,但是如果这个主机挂掉了over了,docker技术就是多个虚拟主机形成一个集群) Swarm ...

  10. vi的替换使用、如何让linux有回收站功能、系统重要文件、目录数据

      1 vi的替换使用方法 vi使用的原理 (编辑文件会生成一个隐藏临时文件) 1.1 替换文件内容方法:vi (1)%s#oldboy#oldgirl#g --- 将oldboy全部替换为oldgi ...