【问题标题】:Java making Proxy Socket multithreadedJava制作Proxy Socket多线程
【发布时间】:2015-06-14 12:01:56
【问题描述】:

我已经构建了一个 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);
        }
    }


}

【问题讨论】:

  • 您需要调用accept()并启动线程来循环处理接受的套接字。
  • @EJP 让我很困惑 :( 把它放在一个循环中但没有用..

标签: java multithreading sockets proxy


【解决方案1】:

您需要的是一个运行循环的线程,该循环通过调用 ServerSocket 上的 accept() 方法来检查服务器套接字是否有新连接。对于每个连接,您需要生成一个线程来处理该连接。

您的代码实际上是通过调用accept() 来检查服务器套接字是否有新连接。然后,您正确地生成了一个客户端线程来处理该连接。但是,您永远不会再次调用 accept()。这就是您的代码有效的原因,但仅适用于一个客户。您还为“服务器”对象生成了一个线程;我不确定这是否适合。

您需要更改的是在循环中运行“server.accept()”语句和相关线程生成。您还需要确保正确处理线程,以便不同的连接最终不会使用彼此的数据。这可能需要以某种适当的方式连接您的“服务器”对象和“客户端”对象。

【讨论】:

  • 我做了一些澄清。关键是accept()调用需要在循环内,而不是只调用一次。
  • 那么循环应该是什么?我尝试将所有内容都放在 try-catch 部分中的 while(true) 循环中,但它没有用..
猜你喜欢
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多