我正在尝试设计一个非常简单的远程端口转发Java程序。当此程序完成并且我在终端(java PortForward 1234 google.com 80
)中运行此程序时,程序应该在1234上侦听连接并将流量转发到远程主机google.com上的80。然后,我应该可以将浏览器指向localhost:1234
,浏览器应该会显示谷歌的页面。
import java.io.*;
import java.net.*;
public class PortForward{
public static void main(String argv[]) throws Exception{
int portNum = Integer.parseInt(argv[0]);
String hostName = argv[1];
int hostportNum = Integer.parseInt(argv[2]);
ServerSocket welcomeSocket = new ServerSocket(locportNum);
while(true){
Socket conSocket = welcomeSocket.accept();
BufferedReader inFromBrowser = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToBrowser = new DataOutputStream(connectionSocket.getOutputStream());
conSocket.close();
}
}
}
我的下一步应该是什么?
答案 0 :(得分:1)
您正在编写HTTP代理。您不需要,已经有许多免费提供,例如Apache Squid。但是,如果必须继续,当您接受套接字时,需要启动一个线程来处理它。该线程的第一件事是从套接字读取HTTP CONNECT命令并获取目标IP地址。然后它应该打开一个到该地址的套接字,并在必要时向接受的套接字发送失败回复,否则它需要再启动两个线程然后退出自己。这两个线程都做同样的事情:从套接字读取并写入另一个套接字。其中一个从接受的套接字读取并写入目标套接字;另一方则反过来。
答案 1 :(得分:0)
我一直拼命搜索,搜索和搜索并搜索下一步该做什么的任何可能提示,但我找不到任何有用的东西。请帮忙。我的下一步应该是什么?
下一步是打开hostName
和hostportNum
端口的套接字。然后,您可能想要创建一些inFromHost
和outToHost
读者/流。然后,您可能想要创建一个线程来从浏览器读取并写入主机,另一个线程从主机读取并写入浏览器。
答案 2 :(得分:0)
很抱歉发布了一个旧问题。但由于尚未回答,我无耻地将您推荐给我的博文。您将找到完全符合您要求的源代码(或二进制jar文件)。
http://kennethxu.blogspot.com/2006/04/java-based-tcpip-port-forwarding.html