udp服务器php代码例子,Java客户端PHP服务器UDP穿孔示例代码
我正在一个需要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穿孔示例代码相关推荐
- bs客户端跨服务器管理文件,bs架构客户端和服务器
bs架构客户端和服务器 内容精选 换一换 SSL(安全套接层,Secure Sockets Layer)是一种安全协议,目的是为互联网通信,提供安全及数据完整性保障.云容器实例支持上传SSL证书,在使 ...
- JAVA中医舌诊接口使用示例代码,JAVA舌象图特征人工智能识别代码,JAVA实现舌象特征检测与识别
中医舌诊接口使用示例-Java示例项目 中医舌诊健康状态检测API 1.此文档适用于集成中国中医舌诊开放平台功能的用户. 2.此文档说明了与中国中医舌诊开放平台的数据交互方法(restful接口),按 ...
- java分割例子,Java 分割字符串详解及实例代码
Java 分割字符串 java.lang.String 的 split() 方法, JDK 1.4 or later public String[] split(String regex,int li ...
- java udp tcp协议_【java】TCP和UDP传输协议
TCP协议和UDP协议的比较 TCP的全称是Transmission Control Protocol (传输控制协议) 传输控制协议,是一种面向连接的协议,类似打电话 在通信的整个过程中保持连接 保 ...
- 客户端与服务器之间的文件传输,客户端与服务器的文件传输
客户端与服务器的文件传输 内容精选 换一换 使用FTP上传文件时,写入失败,文件传输失败.该文档适用于Windows系统上的FTP服务.FTP服务端在NAT环境下,客户端需使用被动模式连接服务端.在这 ...
- java小程序详解_微信小程序登录Java后台接口(详解,附示例代码)
首先看一下官方文档 地址:微信小程序官方文档API登录接口 我们先对官方给的时序图进行简单的分析 1.当小程序调用wx.login()时,会获得一个code(临时登录凭证),然后我们需要用wx.req ...
- 服务器提取用户信息,获取客户端和服务器信息
运行效果: 前台设计界面: 前台代码: 无标题页 服务器端环境 服务器名称: 服务器的IIS: 服务器的IP地址: 服务器的域名: 服务器的操作系统: 服务器的端口: 服务器的路径: 域名主机: 服务 ...
- qt客户端显示服务器发送的图片,qt客户端显示服务器发送的图片
qt客户端显示服务器发送的图片 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. ...
- 天正服务器不显示,天正软件客户端修改服务器地址
天正软件客户端修改服务器地址 内容精选 换一换 如果IP经过NAT/WAF,则只能获取到NAT/WAF转化后的IP地址,无法获取到NAT/WAF前的IP地址.如果客户端为容器,只能获取到容器所在主机的 ...
最新文章
- 产品经理经验谈50篇(四):数据分析常用方法及应用案例解析
- 绵阳python培训_《绵》原文及翻译海绵翻译
- win8.1已阻止java_win8系统下打开java程序时出现应用程序已被安全设置阻止的解决方法...
- linux ls -l 命令 详解
- 裴蜀(贝祖)定理及其证明
- python数据科学课后答案_Python数据科学-技术详解与商业实践-第五讲作业
- win10系统映像恢复
- D4:非成对图像去雾,基于密度与深度分解的自增强方法(CVPR 2022)
- 信息系统项目管理师核心考点(五十四)配置项分类、状态与版本
- html页面比对插件,html页面缩放插件
- Zabbix Server trapper命令注入漏洞(CVE-2020-11800)
- swing开发五子棋
- getInputStream() has already been called for this request解决方法二
- 野火STM32学习笔记
- 升级cocoapods
- 百度飞浆EISeg高效交互式标注分割软件的使用教程
- 四个关键词解读08下半场
- truncate table oec_meoney 1
- python爬取南京市房价_基于python的链家小区房价爬取——仅需60行代码
- 专业CPU信息检测工具:CPU-Z
热门文章
- 希望查询windows下安装cygwin后ssh服务无法启动的解决办法
- HetSANN:基于注意力模型,自动挖掘异质网络语义信息 AAAI2020
- mysql如何创建用户代码_MySQl创建用户和授权的方法介绍(代码示例)
- Rest Framework:二、序列化组件
- 2018最新java基础学习路线
- 使用bootstrap的相关配置
- 关于Unity中的帧动画组件的编写
- API的过去,现在与未来
- 在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码...
- 向内存申请一个二维数组空间,并以**P返回的函数