php中socket的用法详解


Posted in PHP onOctober 24, 2014

本文实例详细讲述了php中socket的用法,分享给大家供大家参考。具体用法如下:

一、开启socket

phpinfo();查看是否开启了socket扩展,否则在php.ini中开启。

二、服务器端代码的写法

<?php

error_reporting(E_ALL);

set_time_limit(0);

//ob_implicit_flush();
$address = '127.0.0.1';

$port = 10005;

//创建端口

if( ($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {

 echo "socket_create() failed :reason:" . socket_strerror(socket_last_error()) . "\n";

}
//绑定

if (socket_bind($sock, $address, $port) === false) {

 echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n";

}
//监听

if (socket_listen($sock, 5) === false) {

 echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n";

}
do {

 //得到一个链接

 if (($msgsock = socket_accept($sock)) === false) {

  echo "socket_accepty() failed :reason:".socket_strerror(socket_last_error($sock)) . "\n";

  break;

 }

 //welcome  发送到客户端

 $msg = "<font color='red'>server send:welcome</font><br/>";

 socket_write($msgsock, $msg, strlen($msg));

 echo 'read client message\n';

 $buf = socket_read($msgsock, 8192);

 $talkback = "received message:$buf\n";

 echo $talkback;

 if (false === socket_write($msgsock, $talkback, strlen($talkback))) {

  echo "socket_write() failed reason:" . socket_strerror(socket_last_error($sock)) ."\n";

 } else {

  echo 'send success';

 }

 socket_close($msgsock);

} while(true);

//关闭socket

socket_close($sock);

?>

服务器端需要在cli模式是执行,有可能cli模式下php.ini文件载入的不一样

可以像如下输出:

php中socket的用法详解

这时候在zhoxh目录下就有个tem.text文件。查看 Configuration File (php.ini) Path => C:\WINDOWS 。不是我的php.ini 文件,这说明调用的php.ini文件时错误的。这时候我们要指定php.ini文件命令如下

php中socket的用法详解

注意的是我的php可以直接执行时配置了环境变量。

三、客户端

<?php

//error_reporting(E_ALL);

echo "<h2>tcp/ip connection </h2>\n";

$service_port = 10005;

$address = '127.0.0.1';
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if ($socket === false) {

 echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";

} else {

 echo "OK. \n";

}
echo "Attempting to connect to '$address' on port '$service_port'...";

$result = socket_connect($socket, $address, $service_port);

if($result === false) {

 echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";

} else {

 echo "OK \n";

}

$in = "HEAD / http/1.1\r\n";

$in .= "HOST: localhost \r\n";

$in .= "Connection: close\r\n\r\n";

$out = "";

echo "sending http head request ...";

socket_write($socket, $in, strlen($in));

echo  "OK\n";
echo "Reading response:\n\n";

while ($out = socket_read($socket, 8192)) {

 echo $out;

}

echo "closeing socket..";

socket_close($socket);

echo "ok .\n\n";

 
执行结果如下:
server:

php中socket的用法详解

client:

php中socket的用法详解

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
Discuz! Passport 通行证整合
Mar 27 PHP
教你如何用php实现LOL数据远程获取
Jun 10 PHP
ThinkPHP模版中导入CSS和JS文件的方法
Nov 29 PHP
php实现中文字符截取防乱码方法汇总
Apr 29 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
Oct 13 PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 PHP
PHP sleep()函数, usleep()函数
Aug 25 PHP
Yii实现复选框批量操作实例代码
Mar 15 PHP
万能的php分页类
Jul 06 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 PHP
php简单读取.vcf格式文件的方法示例
Sep 02 PHP
php实现单笔转账到支付宝功能
Oct 09 PHP
PHP利用header跳转失效的解决方法
Oct 24 #PHP
PHP与MYSQL中UTF8 中文排序示例代码
Oct 23 #PHP
php cookie名使用点号(句号)会被转换
Oct 23 #PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 #PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
Oct 23 #PHP
PHP函数实现分页含文本分页和数字分页
Oct 23 #PHP
10个实用的PHP正则表达式汇总
Oct 23 #PHP
You might like
索尼ICF-SW100收音机评测
2021/03/02 无线电
给ECShop添加最新评论
2015/01/07 PHP
jquery 多级下拉菜单核心代码
2010/05/21 Javascript
js有关元素内容操作小结
2011/12/20 Javascript
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
node.js中的buffer.slice方法使用说明
2014/12/10 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
2015/09/25 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
2017/04/18 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
nodeJs实现基于连接池连接mysql的方法示例
2018/02/10 NodeJs
深入理解Promise.all
2018/08/08 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
2018/12/10 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
详解Python字符串对象的实现
2015/12/24 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
python+opencv实现动态物体识别
2018/01/09 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
termux中matplotlib无法显示中文问题的解决方法
2021/01/11 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
企业职业病防治方案
2014/05/29 职场文书
2016年“世界环境日”校园广播稿
2015/12/18 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js
Python编程super应用场景及示例解析
2021/10/05 Python
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers