Java基于ServletContextListener实现UDP监听
这篇文章主要介绍了Java基于ServletContextListener实现UDP监听,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
使用springboot实现项目启动时的监听,
UDPListener
importjava.io.IOException; importjava.io.UnsupportedEncodingException; importjava.net.DatagramPacket; importjava.net.DatagramSocket; importjava.net.SocketException; importjavax.servlet.ServletContextEvent; importjavax.servlet.ServletContextListener; importjavax.servlet.annotation.WebListener;
@WebListener publicclassUDPListenerimplementsServletContextListener{ publicstaticfinalintMAX_UDP_DATA_SIZE=4096; publicstaticfinalintUDP_PORT=26666; @Override publicvoidcontextInitialized(ServletContextEventsce){ System.out.println("========UDPListenerInitialized========="); try{ //启动一个线程,监听UDP数据报 newThread(newUDPProcess(UDP_PORT)).start(); }catch(Exceptione){ e.printStackTrace(); } } classUDPProcessimplementsRunnable{ DatagramSocketsocket=null; publicUDPProcess(finalintport)throwsSocketException{ socket=newDatagramSocket(port); } @Override publicvoidrun(){ //TODOAuto-generatedmethodstub System.out.println("=======UDPProcess======"); while(true){ byte[]buffer=newbyte[MAX_UDP_DATA_SIZE]; DatagramPacketpacket=newDatagramPacket(buffer,buffer.length); try{ socket.receive(packet); newThread(newProcess(packet)).start(); }catch(IOExceptione){ e.printStackTrace(); } } } } classProcessimplementsRunnable{ publicProcess(DatagramPacketpacket)throwsUnsupportedEncodingException{ //TODOAuto-generatedconstructorstub byte[]buffer=packet.getData();//接收到的UDP信息,然后解码 Stringsrt1=newString(buffer,"GBK").trim(); Stringsrt2=newString(buffer,"UTF-8").trim(); Stringsrt3=newString(buffer,"ISO-8859-1").trim(); System.out.println("=======Processsrt1GBK======"+srt1); System.out.println("=======Processsrt2UTF-8======"+srt2); System.out.println("=======Processsrt3ISO-8859-1======"+srt3); } @Override publicvoidrun(){ //TODOAuto-generatedmethodstub System.out.println("====Processrun====="); } } @Override publicvoidcontextDestroyed(ServletContextEventsce){ System.out.println("========UDPListenerDestroyed========="); } }
DemoApplication
@SpringBootApplication @ServletComponentScan publicclassDemoApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(DemoApplication.class,args); } }
@ServletComponentScanServlet扫描,启动时把servlet、filter、listener自动扫描注入
UDP测试客户端(也可以用测试工具发送UDP包测试):
importjava.io.IOException; importjava.net.DatagramPacket; importjava.net.DatagramSocket; importjava.net.InetAddress;
publicclassUDPClientTest{ publicstaticfinalStringSERVER_HOSTNAME="localhost"; //服务器端口 publicstaticfinalintSERVER_PORT=26666; //本地发送端口 publicstaticfinalintLOCAL_PORT=8888; publicstaticvoidmain(String[]args){ try{ //1,创建udp服务。通过DatagramSocket对象。 DatagramSocketsocket=newDatagramSocket(LOCAL_PORT); //2,确定数据,并封装成数据包。DatagramPacket(byte[]buf,intlength,InetAddress //address,intport) byte[]buf="你好,世界".getBytes(); DatagramPacketdp=newDatagramPacket(buf,buf.length,InetAddress.getByName(SERVER_HOSTNAME), SERVER_PORT); //3,通过socket服务,将已有的数据包发送出去。通过send方法。 socket.send(dp); //4,关闭资源。 socket.close(); }catch(IOExceptione){ e.printStackTrace(); } } }
结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。