1. 程式人生 > >java 監聽埠並時刻接收埠收到的資訊(簡單)

java 監聽埠並時刻接收埠收到的資訊(簡單)

風微涼 2017-05-02 17:29

(注:下文程式碼是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>

這個方法是工作中自己想到的,(要求隨伺服器啟動監聽埠,時刻接收資訊),可能不是最簡潔的,歡迎討論