Java 使 Proxy Socket 多线程化
Java making Proxy Socket multithreaded
我已经构建了一个 java 代理,它可以工作,但只允许 1 个客户端。我知道我需要进行多线程处理,这就是我这样做的原因,这样它会打开新线程,但由于某种原因我无法让它工作...
这是我的代理 class:
public class Proxy {
private static ServerSocket server;
private static int port = 9339;
private static String originalHost = "game.boombeachgame.com";
public static void main(String[] args) throws FileNotFoundException {
System.out.println("INFO: Proxy started");
new Thread(new Runnable() {
@Override
public void run() {
Proxy.startThread();
}
}).start();
}
public static void startThread() {
try {
server = new ServerSocket(port);
Socket clientSocket = server.accept();
new Thread(new Server(originalHost)).start();
new Thread(new Client(clientSocket)).start();
} catch (Exception e) {
System.out.println(e);
}
}
}
您需要的是一个线程 运行 通过调用 ServerSocket 上的 accept() 方法来检查服务器套接字是否有新连接的循环。对于每个连接,您需要生成一个线程来处理该连接。
您的代码实际做的是检查服务器套接字是否有新连接,通过调用 accept(),恰好一次。然后,您正确地产生了一个客户端线程来处理该连接。但是,您再也不会调用 accept() 了。这就是您的代码有效的原因,但仅适用于一个客户。您还为 "Server" 对象生成了一个线程;我不确定这是否合适。
您需要更改的是 运行 循环中的 "server.accept()" 语句和关联的线程生成。您还需要确保正确处理线程,以便不同的连接不会最终使用彼此的数据。这可能需要以某种适当的方式连接您的 "Server" 对象和 "Client" 对象。
我已经构建了一个 java 代理,它可以工作,但只允许 1 个客户端。我知道我需要进行多线程处理,这就是我这样做的原因,这样它会打开新线程,但由于某种原因我无法让它工作...
这是我的代理 class:
public class Proxy {
private static ServerSocket server;
private static int port = 9339;
private static String originalHost = "game.boombeachgame.com";
public static void main(String[] args) throws FileNotFoundException {
System.out.println("INFO: Proxy started");
new Thread(new Runnable() {
@Override
public void run() {
Proxy.startThread();
}
}).start();
}
public static void startThread() {
try {
server = new ServerSocket(port);
Socket clientSocket = server.accept();
new Thread(new Server(originalHost)).start();
new Thread(new Client(clientSocket)).start();
} catch (Exception e) {
System.out.println(e);
}
}
}
您需要的是一个线程 运行 通过调用 ServerSocket 上的 accept() 方法来检查服务器套接字是否有新连接的循环。对于每个连接,您需要生成一个线程来处理该连接。
您的代码实际做的是检查服务器套接字是否有新连接,通过调用 accept(),恰好一次。然后,您正确地产生了一个客户端线程来处理该连接。但是,您再也不会调用 accept() 了。这就是您的代码有效的原因,但仅适用于一个客户。您还为 "Server" 对象生成了一个线程;我不确定这是否合适。
您需要更改的是 运行 循环中的 "server.accept()" 语句和关联的线程生成。您还需要确保正确处理线程,以便不同的连接不会最终使用彼此的数据。这可能需要以某种适当的方式连接您的 "Server" 对象和 "Client" 对象。