Socket监听服务端口应用,实时监听,希望有大牛指出不足,上代码....
服务器启动监听类:
public class ListenerServer extends HttpServlet implements ServletContextListener { //MyServletContextListener是监听者类 public void contextDestroyed(ServletContextEvent arg0) { } public void contextInitialized(ServletContextEvent arg0) { System.out.println("-----------------开始线程-------------------------"); //守护线程 System.out.println("-----------------Socket监听已启动--------------------------"); StartThread s=new StartThread(); s.setDaemon(true);// 设置线程为后台线程,tomcat不会被hold,启动后依然一直监听。 s.start(); } }
守护线程:
public class StartThread extends Thread { public void run() { System.out.println("-----------------触发监听:---------------------------"); int port=8001; System.out.println("-----------------Tomcat port:"+port+"---------------------------"); try { ServerSocket serverSocket = new ServerSocket(port); // 轮流等待请求 while(true) { // 等待客户端请求,无请求则闲置;有请求到来时,返回一个对该请求的socket连接 Socket clientSocket = serverSocket.accept(); //2、调用accept()方法开始监听,等待客户端的连接 // 使用accept()阻塞等待客户请求,有客户 //请求到来则产生一个Socket对象,并继续执行 // 创建zithread对象,通过socket连接通信 Thread t = new Thread(new zithread(clientSocket)); t.start(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
守护线程子线程:
public class zithread implements Runnable{ private BufferedReader reader; private Socket socket; public zithread(Socket clientSocket) { System.out.println("-----------------触发监听:---------------------------"); try { // 得到socket连接 socket = clientSocket; // 得到客户端发来的消息 转成输入流 //获取输入流,并读取客户端信息 InputStreamReader isReader = new InputStreamReader(socket.getInputStream());//字符流 reader = new BufferedReader(isReader);//缓冲方式文本读取由Socket对象得到输入流,并构造相应的BufferedReader对象 //发送指令 输出流 /*OutputStream os=socket.getOutputStream(); PrintWriter pw=new PrintWriter(os); String info=" hello kitty "; pw.write(info); pw.flush();*/ //=socket.shutdownOutput(); } catch (IOException e) { e.printStackTrace(); } } /*监听端口数据处理*/ public void run() { String message; try { while((message = reader.readLine()) != null)//readLine 方法读数据 { System.out.println("客户端消息: " + message.getBytes()); } } catch (IOException e) { e.printStackTrace(); } } }
<listener> <listener-class>com.xx.xx.xx.ListenerServer</listener-class> </listener>
注意端口设置