PHP套接字服务器,检查客户端是否还活着

2023-12-26

我有一个 php 服务器正在监听 1 个 c# 客户端。

当连接建立后,它会一直保持活动状态,直到客户端发送“退出”命令来终止 PHP 服务器。

但是,当 C# 客户端在没有“退出”命令(即:单击 Windows 窗体中的关闭 (x) 按钮)的情况下断开连接时,服务器只会继续侦听,并且无法从该客户端接收任何其他连接。

有没有办法从服务器端(PHP)检查与客户端的连接是否仍然有效?

我的 php 服务器代码基于以下示例1:http://php.net/manual/en/sockets.examples.php http://php.net/manual/en/sockets.examples.php

如果有人有兴趣重现错误/错误行为,请粘贴 example1 中的代码:http://php.net/manual/en/sockets.examples.php http://php.net/manual/en/sockets.examples.php,从 LAN 中的远程客户端通过 telnet 连接,拔下客户端线路... php 服务器将永远挂起,不接受新连接。


在循环中,您需要检查返回值socket_read() http://php.net/manual/function.socket-read.php。如果返回 FALSE,则存在读取错误(这可能是由远程主机关闭连接引起的)。您提供的链接中的示例代码涵盖了这种情况。

如果您需要优雅地处理某些错误状态,您始终可以使用以下命令检查套接字错误代码socket_last_error() http://php.net/manual/function.socket-last-error.php -- 这张纸条 http://php.net/manual/en/function.socket-last-error.php#95160描述可能的代码。

Edit:

当使用 putty 进行 telnet 时,如果我用 X 按钮关闭,则 PHP 中的连接会正确关闭,但如果我拔掉 putty 机器的以太网线,PHP 服务器就会挂起。

杀死 PuTTY 时连接被关闭的原因是 PuTTY 在退出时关闭其打开的连接。这导致socket_read()返回错误代码(我相信ECONNRESET)。如果你拔掉网线,它就没有机会这样做。

TCP 连接取决于您的网络配置方式should最终失败。您可以尝试通过设置来控制超时SO_RCVTIMEO https://www.php.net/manual/function.socket-get-option.php with socket_set_option() https://www.php.net/manual/function.socket-set-option.php,但这并不总是适用于所有平台(我在看着你,WinSock).

或者,您可以使用以下方式滚动自己的轮询循环socket_select() http://php.net/manual/function.socket-select.php有合理的超时时间。如果超时后所有连接的套接字都没有数据要发送,则终止服务器。

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

PHP套接字服务器,检查客户端是否还活着 的相关文章

  • 只获取倒数第二条记录 - mysql-query

    我有一个如下表记录 my table id rating description 1 0 0 bed 2 1 0 good 3 0 0 bed 4 1 0 good 5 0 0 bed 6 0 0 bed 7 0 0 bed 现在我通过评级
  • PHP 裁剪图像以固定宽度和高度而不丢失尺寸比例

    我希望创建尺寸为 100 像素 x 100 像素的缩略图 我看过很多解释这些方法的文章 但如果要保持尺寸比 大多数文章最终都会有宽度 高度 例如 我有一个 450 像素 x 350 像素的图像 我想裁剪为 100px x 100px 如果我
  • PHP PDO 使用 bindParam 第一个参数(不带冒号)[重复]

    这个问题在这里已经有答案了 请检查这个 user id int GET user id sql DELETE FROM users WHERE user id user id query db gt prepare sql query gt
  • artisan 明确编译返回错误代码 255

    跑步时composer install在我的 laravel 项目中 我收到错误 脚本 php artisan 清晰编译处理返回的 post install cmd 事件 错误代码为 255 关于可能出现的问题有什么建议吗 请注意 comp
  • 在 woocommerce 管理订单页面中单击自定义按钮运行函数

    基于 在 woocommerce 中的管理订单列表顶部添加一个按钮 https stackoverflow com questions 49437781 add a button on top of admin orders list in
  • PHP 数组到 JavaScript 数组

    假设我在 php 中有这个数组 cities array Caracas gt array air gt array 4 3 5 Working Days Saturday sea gt array 18 3 5 Days Wednesda
  • PHP比较两个字符串的随机位置

    PHP比较两个字符串 示例我得到了一串数字 1 2 2 1 and another is 2 1 2 1 结果是 true 因为它只是 1 2 2 1 和 2 2 1 1 的位置洗牌 但如果该值为 1 2 2 2 and another i
  • 自动检测内部/外部开发环境

    我们使用以下函数来自动检测我们是在内部机器上还是在实时服务器上 然后为各种组件选择适当的配置 function devIsLocal res false http host SERVER HTTP HOST if http host loc
  • 通过 SO_RCVTIMEO 套接字选项在 Ruby 中设置套接字超时

    我试图通过 SO RCVTIMEO 套接字选项在 Ruby 中设置套接字超时 但它似乎对任何最近的 nix 操作系统都没有影响 使用 Ruby 的 Timeout 模块不是一个选择 因为它需要为每个超时生成和连接线程 这可能会变得昂贵 在需
  • 多维数组内的移动

    我有一个用表格显示的数组 如何使用用户输入进行移动 目前 0 被分配给每个数组 但我计划为该数组分配其他值 我的问题是 如何使用用户输入在数组内向上 向下 向右 向左移动和对角移动 Array 0 gt Array 0 gt 0 1 gt
  • Laravel 验证规则仅针对字母

    我正在尝试添加验证规则以仅接受信件 我正在使用regex规则 但它仍然不起作用 下面是我的代码 Validate request input this gt validate request name gt required regex p
  • Laravel nova diffForHumans 日期时间

    我对用户有字段last active 我想用 diffForHumans 或显示时间time from now来自 Moment js 我怎样才能做到呢 现在我只使用 DateTime make Activiy last active gt
  • Jquery UI 日期选择器 设置默认日期

    我使用 jQuery UI 作为日期选择器 我想在字段中显示当前日期作为默认值 以下是我的代码 请帮助 From Date
  • 如何将 WordPress 类别选择限制为只有一个?

    我有一个自定义帖子类型和一个自定义分类设置 非常标准的东西 但是 我想知道如何限制我的客户在每个帖子中选择多个分类类别 我不介意他们能够创建和删除分类类型 但我不希望他们选择多个分类类型 因为这些是复选框 所以它们可以 也许单选按钮可以工作
  • NetBeans 代码模板 ${date}?

    我在 Eclipse 中有这个代码模板 自 日期 起 当输入时我得到这样的东西 自2009年8月4日起 但是当我添加相同的模板时 自 日期 起 到 NetBeans 它输出 自日期以来 有人可以帮忙吗 还没有答案吗 这在 Netbeans
  • 添加 current_page_item 类

    我正在研究 WordPress 设计 我想创建一个自定义菜单 items wp get nav menu items Menu array order gt ASC orderby gt menu order post type gt na
  • 使用 Laravel 4 验证多个文件上传

    如何在 Laravel 4 中验证上传文件的数组 我已将其设置为允许多个文件 并且已测试这些文件是否存在于 Input file files 数组中 但如何验证每个文件呢 这是我尝试过的 notesData array date gt In
  • 如何从 Laravel 中的表中选择所有列名称?

    我试图从表中获取所有列名Teller 功能 public function getTableColumns tables return DB select DB raw SELECT COLUMN NAME DATA TYPE COLUMN
  • 检查php中位字段是否打开的正确方法是什么

    检查位字段是否打开的正确方法是什么 在 php 中 我想检查来自 db mysql 的位字段是否打开 这是正确的方法吗 if bit 1 还有其他方法吗 我看到有人使用代码ord http jameslow com 2008 08 12 m
  • 搜索引擎如何找到相关内容? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Google 在解析网络时如何找到相关内容 例如 Google 使用 PHP 原生 DOM 库来解析内

随机推荐

  • 使用 Firebase OAuth 保护 RESTful API?

    我在 iOS 和 Web 应用程序中使用 Firebase 来处理用户身份验证 我需要确保用户已登录 然后才能向我的 API 发出任何请求 我如何使用 Firebase 完成这样的事情 我正在考虑使用 Kong https getkong
  • R 中的大型固定效应二项式回归

    我需要在一个相对较大的数据框架上运行逻辑回归 该数据框架包含 480 000 个条目和 3 个固定效应变量 固定效应 var A 有 3233 个级别 var B 有 2326 个级别 var C 有 811 个级别 所以总共我有 6370
  • RSS 项目描述中的图像

    我开始为我的新网站进行 RSS 开发 但我想知道是否有任何方法可以将图像放在项目的描述中 如下所示
  • 当视图已经加载时,如何使用出现的键盘打开视图?

    我有一个要求 在视图中有一个文本字段 当我想通过切换选项卡 基于选项卡的应用程序 打开视图时 第一次加载视图时会出现键盘 因为我调用了 loadview 方法 但是当我切换到 tab2 并再次切换到 tab1 时 不会调用加载视图 我希望每
  • 在银河系坐标中绘制热图

    EDIT 好吧 我想出了一个糟糕的方法来做到这一点 涉及scipy interpolate griddata 我有一些二维数组 130x360 形式的地图 数组中的每个值对应于该点的测量值 这些地图以赤经 ra 和赤纬 dec 形式提供 范
  • 如何获取字符串的第一个单词并将其转换为 int? jQuery

    我需要获取字符串中的第一个单词 并将其转换为整数 如何使用 jQuery 做到这一点 example 223 洛雷姆 伊普苏姆 多洛尔 I need 223 并且它必须转换为integer 任何帮助 将不胜感激 您可以根据任何字符 例如空格
  • iPad 上禁用嵌入式 Youtube 播放器中的全屏按钮

    在研究了 stackoverflow 上至少十个类似的问题后 我似乎偶然发现了一些新东西 最近 不确定具体什么时候停止工作 嵌入式 YouTube 视频上的全屏按钮在 iPad 上被禁用 如果我尝试单击它 则会弹出 您的浏览器不支持全屏 的
  • 使用 lerna 将自定义参数发送到 npm (yarn) 脚本

    我在尝试将参数传递给npm脚本与lerna 我有一个节点脚本 我想在工作区的每个包中运行它 lerna文档建议如下 scripts my script lerna exec node LERNA ROOT PATH scripts my s
  • Swift 一次删除多个对象 Parse 服务器

    我向服务器查询如下 let query PFQuery className posts query whereKey uuid equalTo Ncell uuidLbl text query findObjectsInBackground
  • 从远程 SQLite 数据库复制表?

    有没有办法将数据从一个远程 SQLite 数据库复制到另一个 我在两台服务器上完成了文件复制 但是 一些更改会记录在每个服务器本地的 SQLite 数据库中 为了使文件复制正常工作 我需要复制一个表的内容并将其输入到另一系统上的表中 我知道
  • 如何保护database.yml?

    在 Ruby on Rails 应用程序中 database yml 是一个存储数据库凭据的纯文本文件 当我部署 Rails 应用程序时 我的 Capistrano 中有一个部署后回调 在应用程序的 config 目录中创建到 databa
  • 如何在Ubuntu中生成核心转储文件[重复]

    这个问题在这里已经有答案了 我想知道如何在 Ubuntu 中生成核心转储文件 我使用的是 Ubuntu 8 04 1 和 gcc 编译器 4 2 3 我编写了一个简单的 C 程序来生成核心转储 我已经编译了该程序 如 gcc g badpo
  • 从 StructureMap 获取的 HttpContext 上的空用户

    好吧 我之前的问题 设置有太多变量 所以我将其精简为最基本的组件 给出使用 StructureMap3 的以下代码 IoC setup For
  • 回发或回调参数无效。为什么?

    所以我得到了例外 回发或回调参数无效 使用启用事件验证 在配置或 在 页 出于安全目的 这 功能验证参数 回发或回调事件发起 从服务器控制 最初渲染它们 如果数据 是有效且预期的 使用 ClientScriptManager Registe
  • libreoffice 大量文本颜色更改

    有没有办法更改 LibreOffice 或 Openoffice 中文本中所有出现的特定颜色 是 光标位于find box hit more options 在里面Search Replace对话 点击 Format select Font
  • 如何在Windows 7中设置Python路径[重复]

    这个问题在这里已经有答案了 我尝试在 Windows 7 中设置 python 的路径 但我不能这样做 我去 My Computer gt Properties gt Advanced gt Environment Variables 但我
  • 使用空格而不是制表符进行缩进的客观原因是什么?

    根据 PSR 2 标准使用空格而不是制表符来缩进文件是否有客观原因 有人可以提供 facts 参考 具体的专业知识 PSR 2 标准基于哪个 PSR 2 标准的作者考虑的不仅仅是 外观和感觉 不仅仅是基于意见的东西 而且很多人很难理解为什么
  • 将 Excel 导入 Rails 应用程序

    我正在创建一个供个人使用的小型 Rails 应用程序 并且希望能够上传 Excel 文件以便稍后进行验证并添加到数据库中 我之前曾对 csv 文件进行过此操作 但此后这已变得不切实际 有谁知道使用 roo 或电子表格 gem 上传文件 向用
  • 带颜色编码的 vb.net/C# 代码编辑器[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何带有颜色编码的 winforms 源代码编辑器控件 首选 开源 我好像记得以前遇到过类似的事情
  • PHP套接字服务器,检查客户端是否还活着

    我有一个 php 服务器正在监听 1 个 c 客户端 当连接建立后 它会一直保持活动状态 直到客户端发送 退出 命令来终止 PHP 服务器 但是 当 C 客户端在没有 退出 命令 即 单击 Windows 窗体中的关闭 x 按钮 的情况下断