我正在看看JHttpTunnel库,而OutBoundSocket.java中的这段代码让我有些困惑。
public void connect() throws IOException{
close();
String host=getHost();
int port=getPort();
String request="/index.html?crap=1 HTTP/1.1";
Proxy p=getProxy();
if(p==null){
socket=new Socket(host, port);
request="POST "+request;
}
else{
String phost=p.getHost();
int pport=p.getPort();
socket=new Socket(phost, pport);
request="POST http://"+host+":"+port+request;
}
socket.setTcpNoDelay(true);
in=socket.getInputStream();
out=socket.getOutputStream();
out.write(request.getBytes());
out.write(_rn);
out.write(("Content-Length: "+getContentLength()).getBytes());
out.write(_rn);
out.write("Connection: close".getBytes());
out.write(_rn);
out.write(("Host: "+host+":"+port).getBytes());
out.write(_rn);
out.write(_rn);
out.flush();
sendCount=getContentLength();
}
这似乎直接打开服务器的套接字。防火墙不会阻止它吗?
答案 0 :(得分:0)
防火墙可以阻止它,但它取决于配置,您可以要求代理不会阻止它,答案也是一样的。 上面的代码只是更大图片的一小部分...... 但通常HTTP隧道应该打开一个到HTTP服务器的套接字,并在HTTP请求上封装一个普通的流,以便在HTTP客户端和HTTP服务器之间发送这些请求套接字,这就是你在这里看到的。 你在这段代码中没有看到的是封装内容。 我希望有所帮助。