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>
注意端口设置