我正在编写一个非常简单的传输模拟(请不要问为什么我使用这种方法,这不是我的问题的真正意义)。
我有三个线程正在运行(尽管你可以将它们视为单独的程序)。一个作为客户端,一个作为服务器,一个作为代理。
第一个用作客户端,其主要代码如下:
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,这样代理就无法读取任何覆盖它的内容。因此,设置两个套接字,一个在客户端和代理之间,另一个在代理和服务器之间,不是我正在寻找的解决方案。
提前多多感谢。