我正在一个需要pe2p服务器的项目中工作,但是我还没有找到任何Java客户端php服务器示例代码.我了解udp打孔工作原理的概念,但是我无法在代码中工作.

我尝试过的

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;

}

}

Main.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-要获取其他用户的端口,我手动连接并使用网页上显示的端口.

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: ";

InetAddress IPAddress = InetAddress.getByName();

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 Server得到任何响应,并停留在clientSocket.recieve(..).我猜是因为我的Web服务器的防火墙阻止了udp数据包.

如果该代码对任何人都有效,则我将这样进行:

>将所有可访问的ip和端口保存到数据库中,并将它们列出给其他客户端.

>将Data像上面的DatagramPackets中的ur数据写入其他客户端.

希望对您有所帮助.如果有人可以完全使用它,我也会对此感兴趣:)

标签:java,php,sockets,udp,hole-punching

来源: https://codeday.me/bug/20191013/1905371.html

udp服务器php代码例子,Java客户端PHP服务器UDP穿孔示例代码相关推荐

  1. bs客户端跨服务器管理文件,bs架构客户端和服务器

    bs架构客户端和服务器 内容精选 换一换 SSL(安全套接层,Secure Sockets Layer)是一种安全协议,目的是为互联网通信,提供安全及数据完整性保障.云容器实例支持上传SSL证书,在使 ...

  2. JAVA中医舌诊接口使用示例代码,JAVA舌象图特征人工智能识别代码,JAVA实现舌象特征检测与识别

    中医舌诊接口使用示例-Java示例项目 中医舌诊健康状态检测API 1.此文档适用于集成中国中医舌诊开放平台功能的用户. 2.此文档说明了与中国中医舌诊开放平台的数据交互方法(restful接口),按 ...

  3. java分割例子,Java 分割字符串详解及实例代码

    Java 分割字符串 java.lang.String 的 split() 方法, JDK 1.4 or later public String[] split(String regex,int li ...

  4. java udp tcp协议_【java】TCP和UDP传输协议

    TCP协议和UDP协议的比较 TCP的全称是Transmission Control Protocol (传输控制协议) 传输控制协议,是一种面向连接的协议,类似打电话 在通信的整个过程中保持连接 保 ...

  5. 客户端与服务器之间的文件传输,客户端与服务器的文件传输

    客户端与服务器的文件传输 内容精选 换一换 使用FTP上传文件时,写入失败,文件传输失败.该文档适用于Windows系统上的FTP服务.FTP服务端在NAT环境下,客户端需使用被动模式连接服务端.在这 ...

  6. java小程序详解_微信小程序登录Java后台接口(详解,附示例代码)

    首先看一下官方文档 地址:微信小程序官方文档API登录接口 我们先对官方给的时序图进行简单的分析 1.当小程序调用wx.login()时,会获得一个code(临时登录凭证),然后我们需要用wx.req ...

  7. 服务器提取用户信息,获取客户端和服务器信息

    运行效果: 前台设计界面: 前台代码: 无标题页 服务器端环境 服务器名称: 服务器的IIS: 服务器的IP地址: 服务器的域名: 服务器的操作系统: 服务器的端口: 服务器的路径: 域名主机: 服务 ...

  8. qt客户端显示服务器发送的图片,qt客户端显示服务器发送的图片

    qt客户端显示服务器发送的图片 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. ...

  9. 天正服务器不显示,天正软件客户端修改服务器地址

    天正软件客户端修改服务器地址 内容精选 换一换 如果IP经过NAT/WAF,则只能获取到NAT/WAF转化后的IP地址,无法获取到NAT/WAF前的IP地址.如果客户端为容器,只能获取到容器所在主机的 ...

最新文章

  1. 产品经理经验谈50篇(四):数据分析常用方法及应用案例解析
  2. 绵阳python培训_《绵》原文及翻译海绵翻译
  3. win8.1已阻止java_win8系统下打开java程序时出现应用程序已被安全设置阻止的解决方法...
  4. linux ls -l 命令 详解
  5. 裴蜀(贝祖)定理及其证明
  6. python数据科学课后答案_Python数据科学-技术详解与商业实践-第五讲作业
  7. win10系统映像恢复
  8. D4:非成对图像去雾,基于密度与深度分解的自增强方法(CVPR 2022)
  9. 信息系统项目管理师核心考点(五十四)配置项分类、状态与版本
  10. html页面比对插件,html页面缩放插件
  11. Zabbix Server trapper命令注入漏洞(CVE-2020-11800)
  12. swing开发五子棋
  13. getInputStream() has already been called for this request解决方法二
  14. 野火STM32学习笔记
  15. 升级cocoapods
  16. 百度飞浆EISeg高效交互式标注分割软件的使用教程
  17. 四个关键词解读08下半场
  18. truncate table oec_meoney 1
  19. python爬取南京市房价_基于python的链家小区房价爬取——仅需60行代码
  20. 专业CPU信息检测工具:CPU-Z

热门文章

  1. 希望查询windows下安装cygwin后ssh服务无法启动的解决办法
  2. HetSANN:基于注意力模型,自动挖掘异质网络语义信息 AAAI2020
  3. mysql如何创建用户代码_MySQl创建用户和授权的方法介绍(代码示例)
  4. Rest Framework:二、序列化组件
  5. 2018最新java基础学习路线
  6. 使用bootstrap的相关配置
  7. 关于Unity中的帧动画组件的编写
  8. API的过去,现在与未来
  9. 在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码...
  10. 向内存申请一个二维数组空间,并以**P返回的函数