2011-06-02 72 views
1

我正在看JHttpTunnel庫,這片在OutBoundSocket.java代碼讓我有點糊塗了。HTTP隧道如何工作?

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

防火牆可以阻止它,但它取決於配置,你可以問不會代理街區,答案是相同的。 上面的代碼是一個大局觀的只是一小部分...... 但一般HTTP隧道應該打開一個套接字到HTTP服務器,並封裝在HTTP請求平原流,以發送這些請求HTTP客戶端之間的套接字並且需要HTTP服務器,這就是你在這裏看到的。 你在代碼中看不到的是封裝的東西。 我希望有所幫助。