Java使Proxy Socket多线程化

2023-12-20

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


}

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

您的代码实际上所做的是通过调用accept() 一次检查服务器套接字是否有新连接。然后,您正确地生成一个客户端线程来处理该连接。但是,您再也不会调用accept()。这就是为什么您的代码可以工作,但仅适用于一个客户端。您还可以为“服务器”对象生成一个线程;我不确定这如何适合。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java使Proxy Socket多线程化 的相关文章

随机推荐

  • 致命:坏对象 HEAD

    有人可以帮我解决这个问题吗 我之前曾就此发表过一篇文章 但我无法通过这些答案解决它 请帮忙 我尝试过跑步git fsck full我得到 Checking object directories 100 256 256 done error
  • ORACLE更新后触发器:解决ORA-04091突变表错误

    我正在尝试创建一个触发器 create or replace trigger NAME OF TRIGGER after insert or update on table1 REFERENCING OLD AS OLD NEW AS NE
  • Pandas 对行值进行排序

    我有一个像这样的熊猫数据框 Col1 Col2 Col3 1 1092 203 802 是否可以对这个数据框进行排序并得到这样的结果 Col1 Col3 Col2 1 1092 802 203 I tried sort values但它不起
  • ExecutorService 按顺序执行任务,但从池中获取线程

    我正在尝试构建一个实现ExecutorService 我们称之为SequentialPooledExecutor 具有以下性质 的所有实例SequentialPooledExecutor共享同一个线程池 调用同一个实例SequentialP
  • 如何对 Bundle 中的 javascript 文件进行版本控制?

    我想将我的 JS 脚本包含在Bundle并且同时version它们以避免浏览器缓存 如果这些脚本已更改 有没有 native 方式与ASP NET MVC 5来完成这个 我找到了一个名为的图书馆Cassette http getcasset
  • 如何使用动态行跨度显示数据库中的数据

    我是 php 编程新手 在使用 php 和 html 显示 mysql 数据库中的数据时遇到一些问题 这是我的桌子 location id location location component id comopnent id locati
  • C 多类型函数

    我想用 C 编写一些函数 但它们必须适用于所有数字类型 int float double 什么是好的做法 在 void 上使用指针 当然还有指向函数的指针 或者为每种类型编写不同的函数 例如 float func float a float
  • pyenv 在执行所述模块时在终端中打印模块

    我已经转向使用pyenv运行 python 时 但问题是当我执行一个模块并且该模块导入其他模块时pyenv经常会打印出一大堆对我来说是胡言乱语的内容 例如 alias py37 pyenv local 3 7 3 python Admins
  • Symfony2 __toString() 错误

    我在将实体保存回给我时遇到此错误 Catchable Fatal Error Method My BusinessBundle Entity Type toString must return a string value in var w
  • 使用rest api在Google Drive中创建新文件夹

    仅当谷歌驱动器不存在时 如何使用 python 在谷歌驱动器中创建新文件夹 我对这个 google API 和 python 完全陌生 我的帐户有一个访问令牌 我想使用它创建文件夹 创建文件夹 import json import requ
  • 当 BOM(字节顺序标记)丢失时,如何才能最好地猜测编码?

    我的程序必须读取使用各种编码的文件 它们可能是 ANSI UTF 8 或 UTF 16 大端或小端 当 BOM 字节顺序标记 存在时 我没有问题 我知道该文件是 UTF 8 还是 UTF 16 BE 或 LE 我想假设当没有 BOM 时该文
  • 英特尔 Fortran 95 编译器是否允许模块数组具有非常量大小?

    我已经下载了 Fortran 90 95 自适应网格细化库 Paramesh http www physics drexel edu olson paramesh doc Users manual amr html 现在我正在尝试编译一个附
  • 如何停止水平滚动?

    我用 html 和 javascript 编写了一个文件 垂直滚动应该存在 但我想停止水平滚动 我怎样才能做到这一点 萨弗拉兹有已经提到过 https stackoverflow com questions 2987261 how to s
  • 如何为 BN_generate_prime 播种 PRNG

    我一直无法找到关于在 openssl bn h 中使用 BN generate prime 生成素数的答案 另外 我如何播种该函数使用的 PRNG 单独的问题但与我的代码相关 我正在编写一个程序来生成 RSA 密钥对 如何检查高位是否设置为
  • Angular UI bootstrap - 在 typeahead-no-results 上显示下拉菜单

    尝试在预输入没有结果时获取下拉菜单 但是下拉菜单不显示 看法 div class dropdown div class form group div div
  • 如何在 ggplot2 / Rmarkdown 中跨选项卡进行分面?

    我知道facet wrap and facet grid用于刻面 对于需要更多空间的更详细的图形 能够轻松地进行分面可能会很有用Rmarkdown 选项卡 https stackoverflow com a 38146093 除了将图形的代
  • 为什么 O(1) != O(log(n)) ?对于 n=[整数,长整型,...]

    例如 假设 n Integer MAX VALUE 或 2 123 那么 O log n 32 和 123 就是一个小整数 不是 O 1 吗 有什么不同 我认为 原因是 O 1 是常数 但 O log n 不是 还有其他想法吗 If n上面
  • 使用 Gradle 将 .ebextensions 添加到 Spring Boot Jar 的简洁方法

    是否有一种干净的方法可以将其他根文件夹添加到使用默认 bootRepackage jar 生成的 Spring Boot Jar 文件中 就我而言 我需要 AWS beanstalk 的 ebextenions 文件夹 我知道我可以破解它
  • 尝试对值进行分组?

    我有一些这样的数据 1 2 3 4 5 9 2 6 3 7 我正在寻找这样的输出 组 ID 和该组的成员 1 1 2 6 2 3 4 7 3 5 9 第一行 因为 1 连接 到 2 而 2 连接到 6 第二行 因为 3 连接到 4 3 连接
  • Java使Proxy Socket多线程化

    我已经构建了一个 java 代理 它可以工作 但只允许 1 个客户端 我知道我需要进行多线程处理 这就是我这样做的原因 因此它会打开新线程 但由于某种原因我无法让它工作 这是我的代理类 public class Proxy private