php - javascript(在网页上)和本地网络上的 mc 之间的 udp 套接字连接
问题描述
这一定很简单,我怀疑我走错了兔子洞。
我在通过我们的国内路由器公开的 pi 服务页面(LAMP 服务器)上运行 apache http 服务器。我可以让 php 提供我想要的材料,并认为让 php(在服务器上)通过套接字与本地网络上的另一台机器(例如 192.168.1.73)进行通信会很容易
我可以通过服务器从网页获取数据到本地机器,但无法让服务器从本地机器接收消息。在 php 中调用 ''' socket_bind(...) ''' 给出错误“无法绑定地址 [99]:无法分配请求的地址”
不知道 99 是从哪里来的;安装并运行 ufw 以打开我正在使用的端口(不会认为这是必要或可取的,但无论如何都尝试过)
非常感谢任何帮助。磷
这是一个PHP问题。
在 java 中实现“每日报价”,在与我有问题的 php 相同的机器上运行客户端,并在本地网络上的另一台机器上运行报价服务器。这很好用。用这个 php 客户端替换 java 客户端:
<?php
$server_ip = '192.168.1.78';
$port = 41235;
$message = 'hello world.';
$buf = [];
$skt = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP) or die(..);
socket_sendto($skt,$message,strlen($message),0,$server_ip,$port);
// message is successfully sent and received at other end...
socket_bind($skt,$server_ip,$port)
or die("Could not bind socket\n");
// the bind fails
$bc = socket_recvfrom($skt,$buf,256,0,$server_ip,$port);
echo "Got $bc bytes back";
?>
如上所述失败并出现错误 [99]
解决方案
用例是在本地网络内的机器上运行服务器 - 让我们将其称为 insideServer,并让来自托管在机器上的网页的请求,outsideServer,由运行在 insideServer 上的代码响应。为什么?InsideServer 的服务器是用 java 编写的,因为我喜欢它。在过去,正确的做法是让 java 作为 applet 在用户的机器上运行。现代方法是让 outsideServer 运行 Apache Tomcat。但是,我没有这样做的奢侈,那么如何转发请求?
解决方案是在 outsideServer 的相关目录中有一个 PHP 脚本,该脚本通过套接字连接到 insideServer,其中 insideServer 的代码可以在您想要的任何位置。然而,PHP 一直存在问题。但是,此代码确实有效:
$insideServerIP = '192.168.1.78';
$insideServerPort = 41234;
$message = 'pretend message from web page form';
$skt = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP) or die("create failed: " . socket_last_error());
socket_connect($skt, $insideServerIP, $insideServerPort) or die("connect failed: " . socket_last_error());
socket_write($skt, $message, strlen($message));
$in = socket_read($skt, 256, PHP_BINARY_READ);
echo "$in\n";
socket_close($skt);
我过去几天的研究(Arr !!!)表明没有人知道 socket_bind() 是如何工作的,事实证明你不需要它!如果有错误,请发表评论(或更好的答案),但我相信这个解决方案有效。
磷
推荐阅读
- python - 通过使用元组列表作为索引从 numpy 2d 数组中获取值
- urbancode - 无法访问 Kubernetes 上的 UrbanCode Deploy DB Jar 文件
- javascript - 只能使用一次输入然后它变为空
- node.js - 在进程结束时执行一个函数
- java - 请问Oracle9iDialect 用于oracle 12C 吗?
- python - 在类中的方法中调用实例属性的逻辑
- azure - Azure Log Analytics 查询结果的组电子邮件
- ip - ip over蓝牙/ bluez5
- bootstrap-4 - Bootstrap 4内容在移动分辨率中重叠
- gitlab-ci - 在 gitlab-ci 上使用 docker-compose 时测试容器挂起