java 監聽埠並時刻接收埠收到的資訊(簡單)
(注:下文程式碼是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>
這個方法是工作中自己想到的,(要求隨伺服器啟動監聽埠,時刻接收資訊),可能不是最簡潔的,歡迎討論