php7 获取数据流,stream_socket_accept()

stream_socket_accept()

(PHP 5, PHP 7)

接受由stream_socket_server()创建的套接字连接

说明stream_socket_accept(resource$server_socket[,float$timeout= ini_get("default_socket_timeout")[,string&$peername]]):resource

接受由stream_socket_server()创建的套接字连接。

参数$server_socket需要接受的服务器创建的套接字连接。$timeout覆盖默认的套接字接受的超时时限。输入的时间需以秒为单位。$peername如果包含该参数并且是可以从选中的传输数据中获取到,则将被设置给连接中的客户端主机的名称(地址)(怕出入很大,附带上原文:Will be set to the name (address) of the client which connected, if included and available from the selected transport.)Note:

也可以之后通过stream_socket_get_name()来确定。

返回值

返回接受套接之后的资源流或者在失败时返回FALSE。

注释Warning

该函数不能被用于 UDP 套接字。可以使用stream_socket_recvfrom()和stream_socket_sendto()来取而代之。

参见cURL 函数This code could be very helpfull...

The following code is for the "server". It listen for a message until CTRL-C

while (true)

{

// disconnected every 5 seconds...

receive_message('127.0.0.1','85',5);

}

function receive_message($ipServer,$portNumber,$nbSecondsIdle)

{

// creating the socket...

$socket = stream_socket_server('tcp://'.$ipServer.':'.$portNumber, $errno, $errstr);

if (!$socket)

{

echo "$errstr($errno)
\n";

}

else

{

// while there is connection, i'll receive it... if I didn't receive a message within $nbSecondsIdle seconds, the following function will stop.

while ($conn = @stream_socket_accept($socket,$nbSecondsIdle))

{

$message= fread($conn, 1024);

echo 'I have received that : '.$message;

fputs ($conn, "OK\n");

fclose ($conn);

}

fclose($socket);

}

}

?>

The following code is for the "client". It send a message, and read the respons...

send_message('127.0.0.1','85','Message to send...');

function send_message($ipServer,$portServer,$message)

{

$fp = stream_socket_client("tcp://$ipServer:$portServer", $errno, $errstr);

if (!$fp)

{

echo "ERREUR :$errno-$errstr
\n";

}

else

{

fwrite($fp,"$message\n");

$response = fread($fp, 4);

if ($response != "OK\n")

{echo 'The command couldn\'t be executed...\ncause :'.$response;}

else

{echo 'Execution successfull...';}

fclose($fp);

}

}

?>To check if there's a new connection waiting, without blocking, or (when using non-blocking mode) without notices), you can use stream_accept (as opposed to socket_select).

class GenericClass {

protected $resSocket=null;

function acceptConnections() {

# check that we still have a resource

if(is_resource($this->resSocket)) {

$arrRead=array($this->resSocket);

$arrWrite=array();

/** @warning Passing $arrRead,$arrWrite by reference */

if(stream_select($arrRead,$arrWrite,$arrWrite,0)) {

$resConnection=stream_socket_accept($this->resSocket,0);

# ... other stuff here

}

}

}

}

?>this function, compared to the function socket_accept, got an extra argument "timeout".

To make this function wait indefinitelly to incoming connections, just as in socket_accept, set timeout to -1. It works for me with PHP 5.0.4.Note that if you use 0 as timeout, the connection will timeout right away.To whom it may concern, and it may concern you greatly, stream_set_blocking has no effect on stream_socket_accept.

If you want it to return right away, connection or not, use 0 for the timeout parameter.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浪潮as5300技术方案_浪潮智能存储AS5300G2双活解决方案

智慧医疗已成为提高就医效率、减少医疗差错的有效科技手段。江西省泰和中医院通过采用浪潮智能存储AS5300G2双活解决方案,构筑了一个满足医院数字化、信息化、智能化、可持续发展的信息支撑系统平台,使业务数据有保障、资源调配共享更高效、运维管理更方…

安卓php推送消息机制,深入剖析Android消息机制原理

在Android中,线程内部或者线程之间进行信息交互时经常会使用消息,这些基础的东西如果我们熟悉其内部的原理,将会使我们容易、更好地架构系统,避免一些低级的错误。在学习Android中消息机制之前,我们先了解与消息有关的…

python单元测试mock_Mock 在 Python 单元测试中的使用

本文讲述的是 Python 中 Mock 的使用。如何执行单元测试而不用考验你的耐心很多时候,我们编写的软件会直接与那些被标记为“垃圾”的服务交互。用外行人的话说:服务对我们的应用程序很重要,但是我们想要的是交互,而不是那些不想要…

php bin2hex(),PHP bin2hex() 函数 pack() 函数

bin2hex() 函数bin2hex() 函数把 ASCII 字符的字符串转换为十六进制值。字符串可通过使用 pack() 函数再转换回去。语法bin2hex(string)string必需。要转换的字符串。示例一把 "Shanghai" 转换为十六进制值$str bin2hex("Shanghai");echo($str); // 53686…

java 泛型示例_使用Java泛型的模板方法模式示例

java 泛型示例如果您发现除了某些部分外,您的许多例程完全相同,那么您可能需要考虑使用Template Method来消除容易出错的代码重复 。 这是一个示例:下面是两个做类似事情的类: 实例化并初始化Reader以从CSV文件读取。 阅读每一行…

vue如何使浏览器url固定_怎么给 vue的 vue-router url地址最后加上 / 斜杠

这样没用 - -应该需要怎么加?router.beforeEach((to, from, next) > {if (!checkJs.getCookie(token) && to.path ! / && to.path ! /resetpassword) {next(/);} else if (checkJs.getCookie(token) && from.path /login || checkJs.ge…

oracle dbstart,dbstart: 未找到命令

oracle 12c在centos最小化下安装后,数据库不随机启动,按照网上的教程,编辑了/etc/oratab文件增加了rc.local文件结果还是不随机启动,通过:systemctl status rc-local.service可以看到服务启动失败,提示如标…

确定Java等价性的新时代?

几个月前,我读了一篇题为“确定Java等价性的新时代?”的博客文章。 这在某种程度上与我当时在我那令人脚的副项目Java :: Geci中开发的内容非常吻合 。 我建议您暂停阅读,阅读原始文章,然后再返回此处,即使您知道一定比…

oracle数据modeling分类,由浅入深 NoSQL的五种主流数据模型

【IT168 技术】本文内容是对《NoSQL Data Modeling Techniques》一文的简单概述,原文对NoSQL的几种数据模型进行了详细深入的讨论。是了解NoSQL数据模型不过错过的全面资料。NoSQL的一些非功能性的特性,比如扩展性、性能以及一致性的讨论,目前…

sklearn svm 调参_网舟科技 | 使用SVM模型进行分类预测时的参数调整技巧

原标题:网舟科技 | 使用SVM模型进行分类预测时的参数调整技巧SVM是一种在小样本低维度下比较适用的非线性建模方法,相对比其他常用的算法(比如决策树),模型根据调参的好坏所表现的性能波动非常大。当我们决定使用SVM模型,模型的效…

dederss.php美国与,Dede经验:全站rss/连载和分类首页模板替换

我用的是Dedecms55 utf-8建的站。首先感谢开源工作者们的劳动,其次要感谢使用者写的N多问题与解答。我一个PHP初用者,能在一个月内,一个人把酷猫网http://www.92kcuat.com 建成今天这样,相信很多朋友都可以。当遇到问题时&#xf…

物联网协议之COAP简介及Java实践

目录 前言 一、COAP简介 1、关于COAP 2、COAP特点 3、基于COAP的NB-IoT接入流程 二、CoAP协议JAVA实践 1、californium介绍 2、Java集成 3、Maven 资源引入 4、定义Server端 5、Client调用 6、运行测试 总结 前言 今天平安夜,祝大家圣诞快乐&#xff0c…

遗传算法可用什么算法代替_获取可用密码算法的列表

遗传算法可用什么算法代替您如何了解可用的密码算法? Java规范列出了几种必需的密码,摘要等,但是提供程序通常提供的不止这些。 幸运的是,这很容易了解我们系统上的可用内容。 public class ListAlgorithms {public static void…

bp配置 sap_SAP转储订单之 STO without delivery

在《SAP转储订单STO小结》一文中,介绍了存转储订单(STO)的几种方式,在SAP Library中有相应的描述:1 Stock Transfer Between Plants in One Step2 Stock Transfer Between Plants in TwoSteps3 Stock Transport Order Without Delivery4 Stoc…

高效的企业测试–测试框架(5/6)

本系列文章的这一部分将介绍测试框架以及我在何时以及是否应用它们方面的想法和经验。 关于测试框架的思考 我对大多数测试框架不太满意的原因是,按照我的观点,它们大多增加了一些语法上的便利性和便利性,但本质上并不能解决拥有可维护的测…

linux 源码 目录,Linux系统主要目录及kernel源代码目录

1.在安装Linux后,先要了解清楚系统主要目录到底是干什么用的,避免以后再操作上的失误等。下面,就对Linux主要目录做一下简要说明:/boot:系统启动相关的文件,如内核、initrd,以及grub(bootloader…

[MEGA DEAL] 2020年完整的Java Master Class Bundle(96%)

通过超过62个小时的培训来掌握最流行的编程语言,从而树立良好的开发生涯 嘿,怪胎, 这一周,我们JCG促销专区 ,我们有另一个极端的报价 。我们正在提供一个巨大的96%off的完整2020 Python编程认证捆绑 。 立…

linux nc命令测试端口,Linux和Windows下的NC(Netcat)命令测试端口连通性

1、Linux OS 环境下(以Centos为例),使用nc命令分别测试TCP和UDP端口连通性:css安装方法:nginx在客户端和服务器端分别安装nc工具,安装命令以下:webyum install nc1. Linux OS下使用nc命令,实现TCP方式监听服…

javafx css颜色_JavaFX技巧7:使用CSS颜色常量/派生颜色

javafx css颜色在使用FlexCalendarFX时,我不得不定义一组颜色以可视化不同颜色的不同日历的控件。 每个日历不仅提供一种颜色,还提供几种:用于取消选择/选定/悬停状态的背景和文本颜色。 颜色曾在多个地方使用过,但为了简洁起见&…

rowspan不显示 wpf_wpf的datagrid绑定datatable列不自动更新解决方案

wpf的datagrid绑定datatable列不自动更新描述如下:想利用程序实现显示NORTHWND.MDF中的所有表。listbox显示数据库中的表清单,选中listbox里面的一项以后,在datagrid中显示表的内容。xaml如下:Grid.Column"1" ItemsSour…