我已经构建了一个java代理,它可以工作但只允许1个客户端。我知道我需要做多线程,这就是为什么我这样做,所以它打开了新的线程,但我不能让它因某些原因而工作......
这是我的代理类:
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);
}
}
}
答案 0 :(得分:0)
您需要的是一个运行循环的线程,它通过调用ServerSocket上的accept()方法来检查服务器套接字的新连接。对于每个连接,您需要生成一个线程来处理该连接。
您的代码实际执行的操作是通过调用accept()一次检查服务器套接字是否有新连接。然后,您正确生成客户端线程以处理该连接。但是,您再也不会调用accept()。这就是您的代码有效的原因,但仅适用于一个客户端。你还会为一个" Server"生成一个线程。宾语;我不确定这是怎么回事。
您需要更改的是运行" server.accept()"语句和相关的线程在循环中产生。您还需要确保正确处理线程,以便不同的连接最终不会彼此使用。数据。这可能需要连接你的服务器"对象和你的"客户"以适当的方式对象。