作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你好,我做了一个 php 套接字服务器来从 plc 获取数据,plc 被配置为 tcp 套接字客户端。
我有一个严重的问题,如果本地网络出现故障,似乎功能 socket_accept 停止,plc 无法向我发送数据。
如果我重新启动服务器 plc 重新连接正确。
有人能帮帮我吗?
我的服务器代码:
error_reporting(E_ALL);
/* Allow the script to hang around waiting for connections. */
set_time_limit(0);
/* Turn on implicit output flushing so we see what we're getting
* as it comes in. */
ob_implicit_flush();
$address = ipserver;
$port = 10001;
if (($sock = socket_create(AF_INET, SOCK_STREAM, getprotobyname("TCP"))) === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
exit;
}
if (!socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1)) {
echo socket_strerror(socket_last_error($sock));
exit;
}
if (socket_bind($sock, $address, $port) === false) {
echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
exit;
}
if (socket_listen($sock, 5) === false) {
echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
exit;
}
while(true)
{
//$remote_fd = socket_accept($sock);
if (($remote_fd = socket_accept($sock)) === false) {
echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
break ;
}
do {
$recv = "";
if (false === ($recv = socket_read($remote_fd, 128, PHP_BINARY_READ))) {
echo "socket_read() failed: reason: " . socket_strerror(socket_last_error($remote_fd)) . "\n";
#break 2;
}
if($recv != "") {
echo $recv."\n";
inserisci_letture("t_letture",trim($recv));
if($sent=socket_write($remote_fd,"1",1)===false)
{
echo "socket_write() failed: reason: " . socket_strerror(socket_last_error($remote_fd)) . "\n";
}
}
}
while($recv != "");
}
socket_shutdown($sock);
socket_close($sock);
?>
最佳答案
收听 0.0.0.0
而不是特定的接口(interface),因此如果网络(接口(interface))关闭,则套接字不会关闭。这是一个监听所有接口(interface)的特殊地址。
关于php socket_accept 停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7390772/
我正在尝试在端口 8195 上创建一个简单的监听器。当我在 PHP CLI 条件下尝试以下代码块时,它只显示一次“测试”,然后挂起。如果我删除文件“votifier.run”,该文件设计为开/关开关,
你好,我做了一个 php 套接字服务器来从 plc 获取数据,plc 被配置为 tcp 套接字客户端。 我有一个严重的问题,如果本地网络出现故障,似乎功能 socket_accept 停止,plc 无
我是一名优秀的程序员,十分优秀!