package proxy;
import java.net.Socket;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.io.InterruptedIOException;
/**
* 監聽處理類
**/
public class Listener extends Thread {
ProxyServer ProxyServerHandle = null;
ServerSocket listen_socket;
int port;
Service service;
volatile boolean stop = false; //是否請求停止
/**
* 創建線程并加入到線程組中
**/
public Listener(ProxyServer ProxyServer, ThreadGroup group, int port, Service service)
throws IOException
{
super(group, "Listener:" + port);
this.ProxyServerHandle = ProxyServer;
listen_socket = new ServerSocket(port);
//服務器從客戶端讀取數據超時時間
listen_socket.setSoTimeout(ProxyServer.SERVER_TIME_OUT);
this.port = port;
this.service = service;
}
/**
* 停止服務
***/
public void pleaseStop() {
this.stop = true;
this.interrupt();
try {
listen_socket.close();
}
catch (IOException e) {}
}
public void run() {
while (!this.stop) {
try {
Socket client = listen_socket.accept();
//設置超時間,解決SOCKET阻塞
client.setSoTimeout(ProxyServer.SERVER_TIME_OUT);
this.ProxyServerHandle.addConnection(client, service);
}
catch (InterruptedIOException e) {}
catch (IOException e) {
if (ProxyServer._DEBUG_){
Logs.log("Listener 56:" + e);
}
}
}
}
}