(注:下文代码是java服务器端获取gps定位指令代码,仅供参考)(语言能力有限)
思路:
编写服务器监听类(服务器启动执行创建守护线程:防止阻塞)
编写守护主线程(创建socket通信等待客户端发送信息:确保持续接收客户端请求)
编写守护子线程来执行具体方法。
首先编写服务器启动监听类:
public class videoandGPS extends HttpServlet implements ServletContextListener{
public void contextDestroyed(ServletContextEvent arg0) {
}
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("-----------------video and GPS thread--------------------------");
//gps守护线程
System.out.println("-----------------GPS监听已启动--------------------------");
StartThread s=new StartThread();
s.setDaemon(true);// 设置线程为后台线程,tomcat不会被hold,启动后依然一直监听。
s.start();
}
}
然后编写守护线程代码
public class StartThread extends Thread {
public void run() {
int GPSport=9999;
System.out.println("-----------------GPSport:"+GPSport+"---------------------------");
try {
ServerSocket serverSocket = new ServerSocket(GPSport);
// 轮流等待请求
while(true)
{
// 等待客户端请求,无请求则闲置;有请求到来时,返回一个对该请求的socket连接
Socket clientSocket = serverSocket.accept();
// 创建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)
{
try
{
// 得到socket连接
socket = clientSocket;
// 得到客户端发来的消息
InputStreamReader isReader = new InputStreamReader(socket.getInputStream());
reader = new BufferedReader(isReader);
//发送指令
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
String info="[3G*4700546714*0005*VERNO]";
pw.write(info);
pw.flush();
//socket.shutdownOutput();
} catch (IOException e)
{
e.printStackTrace();
}
}
public void run() {
String message;
try
{
while((message = reader.readLine()) != null)
{
System.out.println("客户端消息: " + message);
}
} catch (IOException e)
{
e.printStackTrace();
}
}
}
最后在web.xml里配置监听:
<listener>
<listener-class>videoandGPS.videoandGPS</listener-class>
</listener>
这个方法是工作中自己想到的,(要求随服务器启动监听端口,时刻接收信息),可能不是最简洁的,欢迎讨论