使用Java中的套接字和代理

时间:2011-05-18 16:17:36

标签: java sockets proxy

我正在编写一个非常简单的传输模拟(请不要问为什么我使用这种方法,这不是我的问题的真正意义)。

我有三个线程正在运行(尽管你可以将它们视为单独的程序)。一个作为客户端,一个作为服务器,一个作为代理。

第一个用作客户端,其主要代码如下:

try {
    Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(InetAddress.getLocalHost(), 4466));
    Socket socket = new Socket(proxy);
    InetSocketAddress socketAddress = new InetSocketAddress(InetAddress.getLocalHost(), 4456);
    socket.connect(socketAddress);

    // send data
    for (String straat : straten) {
        socket.getOutputStream().write(straat.getBytes());
    }

    socket.getOutputStream().flush();
    socket.getOutputStream().close();
    socket.close();

} catch (Exception e) {
    e.printStackTrace();
}

第二个是服务器端,在这里给出:

public void run() {
    try {
        ServerSocket ss = new ServerSocket(4456);
        Socket s = ss.accept();
        BufferedReader in = new BufferedReader(
                new InputStreamReader(s.getInputStream()));

        String incoming;
        while ((incoming = in.readLine()) != null) {
            panel.append(incoming + "\n");
        }

        panel.append("\n");
        s.getInputStream().close();
        s.close();
        ss.close();

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

然后是代理线程:

public void run() {
    try {
        ServerSocket ss = new ServerSocket(4466);
        Socket s = ss.accept();
        BufferedReader in = new BufferedReader(
                new InputStreamReader(s.getInputStream()));

        panel.append(verzenderId + "\n");

        String incoming;
        while ((incoming = in.readLine()) != null) {
            panel.append(incoming + "\n");
        }

        panel.append("\n");
        s.getInputStream().close();
        s.close();
        ss.close();

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

不知何故,这不起作用。消息将直接发送到服务器,代理不会收到任何套接字请求。

如何使这项工作成为端口4466成为客户端线程和服务器线程之间通信的代理?

目标是使客户端和服务器之间的这个套接字成为SSLSocket,这样代理就无法读取任何覆盖它的内容。因此,设置两个套接字,一个在客户端和代理之间,另一个在代理和服务器之间,不是我正在寻找的解决方案。

提前多多感谢。

0 个答案:

没有答案