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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。