2014-09-29 131 views
0

我正尝试使用Java创建一个简单的Web代理应用程序(不使用HTTPUrlConnection类)。使用Java套接字类连接到Web服务器

到目前为止,我已经成功地让我的服务器在端口10000上侦听,然后当我在浏览器中输入URL时接受客户端连接。

我现在需要我的代理将HTTP请求从浏览器转发到实际的Web服务器(我输入浏览器的URL)。

但是,我得到一个java.net.UnknownHostException:当试图创建我的代理和Web服务器之间的套接字连接。有谁知道什么可能导致这个问题?

以下是显示错误和完整代码的输出。很感谢任何形式的帮助!

Starting the socket server at port:10000 
Listening..... 
Socket[addr=/127.0.0.1,port=64099,localport=10000]has connected 
URL IS http://www.hotmail.com 
Can't connect 
java.net.UnknownHostException: http://www.hotmail.com 

import java.net.*; 
import java.io.*; 

public class Proxy { 

private ServerSocket serverSocket; 
private int port; 

public Proxy(int port) { 
    this.port = port; } 

public static void main(String[] args) { 
    int port = 10000;    
    try { 
     // initialize the proxy 
     Proxy proxy = new Proxy(port); 
     proxy.start(); 
     } 
    catch (IOException e) { 
     e.printStackTrace(); 
     } 
} 

public void start() throws IOException { 
    System.out.println("Starting the socket server at port:" + port); 
    serverSocket = new ServerSocket(port); 

    //Listen for client connection 
    System.out.println("Listening....."); 
    Socket client = serverSocket.accept(); 

    //A client has connected to this server 
    verifyClient(client); 
} 

private void verifyClient(Socket client) throws IOException { 
    System.out.println(client + "has connected"); 
    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 

    //Parse the HTTP request from the browser and find the URL 
    String request; 
    while ((request = in.readLine()) != null) { 
     if (request.contains("http://")){ 
      StringBuilder sb = new StringBuilder(request); 
      sb.delete(0,4); 
      sb.delete(sb.length()-9,sb.length()); 
      makeConnection(sb.toString());    
      break;} 
     in.close(); 
    } 
} 

private void makeConnection(String url) throws IOException{ 
//Establish connection between proxy & web server on socket 
try { 
    InetAddress addr; 
    URL aURL = new URL(url); 
    System.out.println("URL IS " + aURL.toString()); 
    Socket server = new Socket(urlString,80); 
    addr = server.getInetAddress(); 
    System.out.println("IP is: " + addr); 
    System.out.println("Connected to " + addr); 
    server.close(); 
} 
catch (IOException e) { 
    System.out.println("Can't connect"); 
    System.out.println(e); 
    } 

}

+0

如果我输入这个URL到我的浏览器中,我会看到一个页面,上面写着“找不到页面” – ControlAltDel 2014-09-29 16:53:20

+0

啊,这是我的错,我粘贴输出时,我从问题页面重新调整。上述错误发生在我尝试的任何网站上。我已经更新了这个问题以避免混淆。 – user3792362 2014-09-29 16:57:09

+0

如果您需要将套接字连接到www.stackoverload.com,如果之后包含路径,则会出现错误 – ControlAltDel 2014-09-29 16:57:35

回答

0

从您的更新,就好像你正在试图建立一个套接字连接 “http://www.hotmail.com”。这应该只是www.hotmail.com。之前的“http://”是一个问题。

+0

这样做会出现此错误:java.net.MalformedURLException:无协议。 – user3792362 2014-09-29 17:03:05

+0

请勿创建URL对象。只需创建hostString – ControlAltDel 2014-09-29 17:09:51

+0

我试过了(直接用hostString连接到socket,而不是创建一个URL对象),但我仍然收到相同的结果:java.net.UnknownHostException。 – user3792362 2014-09-29 17:20:43

相关问题