Java-Client PHP-Server UDP打洞示例代码

2023-12-13

我正在开发一个需要 ea p2p 服务器的项目,但我还没有找到任何 java-client php-server 示例代码。我了解 udp 打孔工作原理的概念,但我无法在代码中执行任何操作。

enter image description here

我尝试过的:

TheSocket.java

public class TheSocket {

public static String response = "hello";
public static String request;
public static String webServerAddress;

public static ServerSocket s;

protected static ServerSocket getServerSocket(int port)throws Exception{
    return new ServerSocket(port);
}

public static void handleRequest(Socket s){
    BufferedReader is;
    PrintWriter os;

    try{
        webServerAddress = s.getInetAddress().toString();
        is = new BufferedReader(new InputStreamReader(s.getInputStream()));

        request = is.readLine();

        System.out.println(request);

        os = new PrintWriter(s.getOutputStream(), true);
        os.println("HTTP/1.0 200");
        os.println("Content-type: text/html");
        os.println("Server-name: TheSocket");
        os.println("Content-length: " + response.length());
        os.println("");
        os.println(response);
        os.flush();
        os.close();
        s.close();

    }catch(Exception e){
        System.out.println("Failed to send response to client: " + e.getMessage());
    }finally{
        if(s != null){
            try{
                s.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }
    return;
}
}

主程序.java

public class Main {

public static void main(String[] args)throws Exception{
    TheSocket.s = TheSocket.getServerSocket(6789);
    while(true){
        Socket serverSocket = TheSocket.s.accept();
        TheSocket.handleRequest(serverSocket);
    }
}

PHP-CONNECT.php - 为了获取其他用户端口,我手动连接并使用网页上显示的端口。

<?php
    echo $_SERVER['REMOTE_ADDR'].':'.$_SERVER['REMOTE_PORT'];
?>

上面代码的问题是,除非我进行端口转发,否则它无法到达套接字。

如果您有任何疑问,请评论!


我面临着类似的问题。并试图以类似的方式解决它。

你的代码的某些部分在我看来是错误的。 Java 中的套接字是为TCP但标题说UDP。因此你应该使用DatagramSockets。 但后来我们也遇到了同样的问题。 HTTP 请求也使用 tcp,因此在 tcp 会话关闭后,使用 HTTP 打开端口可能会导致端口损坏。 (只是猜测)


public class Main {

    public static void main(String[] args) {

        try
        {

            String httpRequest = "GET /index.php HTTP/1.1\n" +
                    "Host: <PHP SERVER NAME HERE>";

            InetAddress IPAddress = InetAddress.getByName(<PHP SERVER IP HERE>);

            DatagramSocket clientSocket = new DatagramSocket();
            byte[] sendData = new byte[1024];
            byte[] receiveData = new byte[1024];
            String sentence = httpRequest;
            sendData = sentence.getBytes();

            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 80);
            clientSocket.send(sendPacket);
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            clientSocket.receive(receivePacket);

            String modifiedSentence = new String(receivePacket.getData());
            System.out.println("FROM SERVER:" + modifiedSentence);

            clientSocket.close();

        }catch(Exception e){e.printStackTrace();}

    }


}

理论上,上面的代码通过 UDP 发送 HTTP 请求。这样显示的端口就是UDP端口。就我而言,我没有从 PHP 服务器得到任何响应,并停留在 clientSocket.recieve(..) 。我猜是因为我的网络服务器的防火墙阻止了 udp 数据包。 如果代码对任何人都有效,我会像这样继续:

  1. 将所有访问 ip 和端口保存到数据库并将它们列出给其他客户端。
  2. 像上面那样将您的数据写入数据报包中到另一个客户端。

我希望这会有所帮助。如果有人可以让它完全工作,我也会对此感兴趣:)

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

Java-Client PHP-Server UDP打洞示例代码 的相关文章

  • 将表值参数与 SQL Server JDBC 结合使用

    任何人都可以提供一些有关如何将表值参数 TVP 与 SQL Server JDBC 一起使用的指导吗 我使用的是微软提供的6 0版本的SQL Server驱动程序 我已经查看了官方文档 https msdn microsoft com en
  • 无法加载或查找主类,可以在命令行中使用,但不能在 IDE 中使用[重复]

    这个问题在这里已经有答案了 在将其标记为重复之前 请先听我说完 我正在尝试使用 gradle 导入一个 java 项目 功能齐全 适用于所有其他笔记本电脑 没有问题 我的项目 100 正常运行 适用于所有其他笔记本电脑 当我的笔记本电脑被重
  • Ebay api GetSellerList,解析响应 XML

    我正在使用 eBay 交易 api 来获取当前列出的卖家股票 我正在使用 GetSellerList 调用 我在解析 xml 时遇到问题 然后将其插入到网站商店中 这是 xml 请求
  • 计算日期之间的天数差异

    在我的代码中 日期之间的差异是错误的 因为它应该是 38 天而不是 8 天 我该如何修复 package random04diferencadata import java text ParseException import java t
  • 如何记录来自 Akka (Java) 的所有传入消息

    在 Scala 中 您可以使用 LoggingReceive 包装接收函数 如何通过 Java API 实现相同的目标 def receive LoggingReceive case x do something Scala API 有Lo
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • 如何删除文件

    我们有一个脚本 scripts ourscript php和一个文件 media movie1 flv 当我们运行时 我们如何删除这个文件ourscript php Using unlink http php net manual en f
  • Android Studio 将音乐文件读取为文本文件,如何恢复它?

    gameAlert mp3是我的声音文件 运行应用程序时 它询问我该文件不与任何文件类型关联 请定义关联 我选择TextFile错误地 现在我的音乐文件被读取为文本文件 我如何将其转换回music file protected void o
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • Dispatcher-servlet 无法映射到 websocket 请求

    我正在开发一个以Spring为主要框架的Java web应用程序 特别使用Spring core Spring mvc Spring security Spring data Spring websocket 像这样在 Spring 上下文
  • 我可以在 PHP 会话变量中安全地存储用户名和密码吗?

    我想在 REST api 之上制作一个轻量级的 web 应用程序 用户只需进行一次身份验证 从那时起 所有针对 web api 的请求都希望通过以某种方式保持用户名和密码有效来完成 我已经做了一个工作原型我在哪里将用户名和密码存储在会话变量
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 如何在 Quartz 调度程序中每 25 秒运行一次?

    我正在使用 Java 的 Quartz Scheduling API 你能帮我使用 cron 表达式每 25 秒运行一次吗 这只是一个延迟 它不必总是从第 0 秒开始 例如 序列如下 0 00 0 25 0 50 1 15 1 40 2 0
  • 挂钩 Eclipse 构建过程吗?

    我希望在 Eclipse 中按下构建按钮时能够运行一个简单的 Java 程序 目前 当我单击 构建 时 它会运行一些 JRebel 日志记录代码 我有一个程序可以解析 JRebel 日志文件并将统计信息存储在数据库中 是否可以编写一个插件或
  • 反向引用在 PHP 中不起作用

    最近我一直在研究 更多的是在实践中说实话 正则表达式 我注意到他的力量 我提出的这个要求 link https stackoverflow com questions 30380397 take the text up to a speci
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文
  • 嵌入式 Jetty - 以编程方式添加基于表单的身份验证

    有没有一种方法可以按如下方式以编程方式添加基于表单的身份验证 我用的是我自己的LdapLoginModule 最初我使用基本身份验证并且工作正常 但现在我想在登录页面上进行更多控制 例如显示徽标等 有没有好的样品 我正在使用嵌入式 jett
  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function

随机推荐

  • 将二进制文件读入字符串

    这一定是显而易见的 但我无法弄清楚 为此我花了几乎一整天的时间 我很乐意给能让我放松的人买瓶啤酒 File file new File filePath byte bytes new byte int file length DataInp
  • R 图频率分布

    如何在 R 中绘制频率分布 我不想对值进行分类 我只想绘制每个值的频率 这hist函数坚持分箱值 除非我手动指定分箱 真的很乏味 因为我事先不知道这些值 你可以plot the table您的数据 xx lt sample 1 10 100
  • 如何从 crm 中的插件注册恢复我的插件数据?

    将程序集更新为插件注册时 在第 2 步 选择要注册的插件和工作流程活动 如果没有选择所有插件 它们将连同插件注册中的步骤和图像一起删除 有没有办法恢复已删除的插件 是否有 XML 或文件可以帮助恢复步骤和图像 如果您有较早的解决方案备份或通
  • 我可以创建从网络上的 UNC 路径复制文件的安装程序吗?

    是否可以创建 Inno Setup 脚本来从网络上的 UNC 路径复制文件 而不是静态地将它们添加到安装文件中 如果是这样 如果我需要先对路径进行身份验证 还可以吗 Inno Setup 脚本中是否有提供身份验证信息的机制 本质上 我希望安
  • Python 导入 MySQLdb 错误 - Mac 10.6

    我下载并按照 MySQL 5 5 8 的安装说明进行操作 http dev mysql com downloads mysql 以及 MySQLdb python 插件 http sourceforge net projects mysql
  • PDO 多个查询:提交和回滚事务

    我需要触发 2 个查询 目前我正在这样做 Begin Transaction this gt db gt beginTransaction Fire Queries if query one gt execute if query two
  • 如何在 Azure 搜索中忽略重音符号?

    Azure 搜索是否支持某种忽略重音字符的方式 例如 如果有人搜索e它应该包括 搜索中的字符 或者我们是否需要在构建 Azure 搜索索引时添加一些转换 欢迎任何建议 谢谢 是的 请在您的现场使用 ASCII 折叠分析仪 为此 请将字段上的
  • Entity Framework 5 和 Amazon RDS - “底层提供程序在 Open 时失败。”

    我有一个 C Entity Framework Web 应用程序 可以在本地 SQL 2012 数据库上正常运行 我将数据库复制到新的 RDS 实例 并且可以通过 Visual Studio 和 SQL Server Management
  • PHP 不区分大小写和重音的数组搜索

    我有一个包含单词的数组 其中一些带有重音符号 我想测试给定的单词是否在该数组中 但使其不区分大小写和重音 例如 array array coche cami n moto carro 我想要一个简单的小功能 比如in array 如果我的字
  • 您可以在 WPF 应用程序中使用 jQuery 吗?

    在过去的几个月里 我一直在创建一个 WPF 应用程序 我想向我的应用程序添加一些动画 之前有人告诉我 jQuery 是一个很好的用于动画的 Javascript 库 问题是 环顾四周后 互联网上没有太多东西让我知道这是否可行 我对 jQue
  • 为什么在访问整数时缓冲区溢出会导致分段错误?

    在函数 A 调用函数 B 期间 B 分配一个 100 个字符的数组并多次填充它 其中一次使用 101 个字符的字符串 一次使用 110 个字符的字符串 这是一个明显的错误 随后 函数 A 尝试访问完全不相关的 int 变量 i 并发生分段错
  • 有关 C# 4.0 中的代码契约的书籍 [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 虽然我已经了解代码契约有一
  • Outlook 无法识别 ics 消息

    我正在尝试在 PHP 中创建一个 ics 文件 并将其邮寄给用户 该解决方案在 Gmail 中运行良好 我收到了一份精美的邀请 所有信息都出现在正确的位置 但 Outlook 似乎根本无法识别它 我收到一封没有附件的空电子邮件 据我所知 没
  • Windows 上的卷曲

    我已关注此链接上的所有内容 如何在 Windows 上安装 设置和使用 cURL 但我无法安装最新的curl 7 50 3https curl haxx se download html 在 Windows 7 2008 Server R2
  • 在方向更改时从双窗格切换到单窗格维护片段堆栈

    目前 我在平板电脑上有横向和纵向的双窗格布局 与设置类似 我有一个活动将片段加载到左侧选择窗格中 然后在显示的任何右侧片段中所做的选择都会导致更多片段显示到右侧窗格中 并一直添加到后台堆栈 现在我可以看到 对于某些平板电脑来说 使用一个用于
  • UAC 风格的提升提示

    我有兴趣在临时会话中启动一个窗口 就像 UAC 提示的显示方式一样 有些人对这个概念感兴趣 所以我想我应该在这里问 本质上 我们想要的是一个像UAC 你确定要 提示一样的提升窗口 但具有任意窗口 最终目标是防止窗口事件挂钩以及密码输入期间可
  • 正则表达式在字符串中查找 Youtube 链接[重复]

    这个问题在这里已经有答案了 我有一个这样的字符串 Lorem Ipsum is simply dummy text of the printing and typesetting industry Lorem Ipsum has been
  • 为什么我的 cfloop 在插入第一个 id 后停止?

    我创建了 cfloop 它会执行我在循环上方创建的查询 在循环内部 我有另一个定义值的循环 然后使用 insert 语句进行 cfquery 在尝试将记录插入数据库之前 我测试了循环 一切看起来都很好 当我尝试应用它来插入我的记录后 我的插
  • Rails Cocoon gem 没有错误,也没有输出

    我正在使用 cocoon gem 开发动态嵌套表单 我有两个型号 class CrossTable lt ActiveRecord Base attr accessible title table name database folder
  • Java-Client PHP-Server UDP打洞示例代码

    我正在开发一个需要 ea p2p 服务器的项目 但我还没有找到任何 java client php server 示例代码 我了解 udp 打孔工作原理的概念 但我无法在代码中执行任何操作 我尝试过的 TheSocket java publ