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 相关文章推荐
PHP5中的this,self和parent关键字详解教程
Mar 19 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
May 13 PHP
zend framework文件上传功能实例代码
Dec 25 PHP
php中异常处理方法小结
Jan 09 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
Oct 08 PHP
php简单实现批量上传图片的方法
May 09 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
May 22 PHP
PHP查询分页的实现代码
Jun 09 PHP
PHP多进程编程实例详解
Jul 19 PHP
php获取手机端的号码以及ip地址实例代码
Sep 12 PHP
PHP封装请求类实例分析【基于Yii框架】
Oct 17 PHP
如何在PHP中生成随机数
Jun 04 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
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
PHP 输出URL的快捷方式示例代码
2013/09/22 PHP
php表单敏感字符过滤类
2014/12/08 PHP
PHP常见错误提示含义解释(实用!值得收藏)
2016/04/25 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
2018/07/17 PHP
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
kmock javascript 单元测试代码
2011/02/06 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
JS 实现Table相同行的单元格自动合并示例代码
2013/08/27 Javascript
JS小游戏之仙剑翻牌源码详解
2014/09/25 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
js创建数组的简单方法
2016/07/27 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
vue-router实现webApp切换页面动画效果代码
2017/05/25 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
antd多选下拉框一行展示的实现方式
2020/10/31 Javascript
js实现弹幕墙效果
2020/12/10 Javascript
八大排序算法的Python实现
2021/01/28 Python
Python探索之创建二叉树
2017/10/25 Python
Python定时器实例代码
2017/11/01 Python
python的pip安装以及使用教程
2018/09/18 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
基于matplotlib xticks用法详解
2020/04/16 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
土木建筑学生自我评价
2014/01/14 职场文书
国培远程培训感言
2014/03/08 职场文书
四风对照检查材料范文
2014/09/27 职场文书
化工见习报告范文
2014/10/31 职场文书
2015年生产车间工作总结
2015/04/22 职场文书
小学见习报告
2015/06/23 职场文书