java 类型Tomcat 服务器多进程监听,返回数据 可以动态设置想要的ip
package com.jiaheu.result;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URLDecoder;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Entrance{
private static ExecutorService exec ;
private Socket socket;
private static String inetAddress;
public static void main(String[] args) throws Exception{
for(String in:args){
inetAddress = in;
}
exec = Executors.newCachedThreadPool();
Entrance wechatSpider = new Entrance();
wechatSpider.startServer();
}
public void startServer() throws InterruptedException, ExecutionException{
try {
ServerSocket serverSocket = new ServerSocket();//
if(inetAddress != null){
serverSocket.bind(new InetSocketAddress(inetAddress,2345));
}else{
serverSocket.bind(new InetSocketAddress(2345));
}
System.out.println("设置IP为:"+inetAddress);
System.out.println("等待请求");
while(true){
socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String readContent;
while ((readContent = bufferedReader.readLine()) != null) {
if(readContent.contains("GET /geturl?url=")){
if(readContent.contains("/geturl?url=")){
String[] msgs = readContent.toString().split(" ");
String url[] = null;
url = msgs[1].split("url=");
exec.submit(new TaskWithResult(URLDecoder.decode(url[1]),socket));
}
}
if (readContent.length() == 0)
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class TaskWithResult implements Callable<String>{//实现这个接口,调用的是call()方法
private String strUrlPath;
private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private Socket socket;
public TaskWithResult(String strUrlPath,Socket socket){
this.strUrlPath = strUrlPath;
this.socket = socket;
}
public String call(){
try{
//
WebClient webClient = new WebClient();
webClient.getOptions().setJavaScriptEnabled(false);
webClient.getOptions().setCssEnabled(false);
WebRequest webRequest = new WebRequest(new URL(strUrlPath));
webRequest.setHttpMethod(HttpMethod.GET);
Page page = webClient.getPage(webRequest);
WebResponse webResponse = page.getWebResponse();
int status = webResponse.getStatusCode();
String startTime = formatter.format(new Date());
((HtmlPage) page).asXml();
String endTime = formatter.format(new Date());
webClient.close();
OutputStream outputStream = socket.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
System.out.println("拿到数据");
bufferedWriter.write("HTTP/1.1 200 OK\n");
bufferedWriter.write("Content-Type: text/html;charset=utf8\n");
bufferedWriter.write("\n");
System.out.println(status + "|"+startTime+"|"+endTime);
System.out.println("数据输出完毕.");
bufferedWriter.write(status + "|"+startTime+"|"+endTime);
bufferedWriter.flush();
socket.close();
System.out.println("客户端关闭.");
}catch(Exception e){}
return null;
}
}