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 相关文章推荐
PHP入门
Oct 09 PHP
攻克CakePHP系列二 表单数据显示
Oct 22 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
Oct 03 PHP
对象失去焦点时自己动提交数据的实现代码
Nov 06 PHP
基于flush()不能按顺序输出时的解决办法
Jun 29 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
Feb 18 PHP
php不使用插件导出excel的简单方法
Mar 04 PHP
php中使用array_filter()函数过滤空数组的实现代码
Aug 19 PHP
PHP中执行cmd命令的方法
Oct 11 PHP
php动态生成缩略图并输出显示的方法
Apr 20 PHP
Yii2实现让关联字段支持搜索功能的方法
Aug 10 PHP
laravel 模型查询按照whereIn排序的示例
Oct 16 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
自动分页的不完整解决方案
2007/01/12 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
学习jquery之一
2007/04/27 Javascript
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
浅谈javascript的调试
2015/01/28 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
2017/05/03 Javascript
jquery中each循环的简单回滚操作
2017/05/05 jQuery
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
详解微信小程序的不同函数调用的几种方法
2019/05/08 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
Vue调用后端java接口的实例代码
2019/10/28 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
手把手教你如何编译打包video.js
2020/12/09 Javascript
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
python实现从ftp服务器下载文件的方法
2015/04/30 Python
详解Python中的静态方法与类成员方法
2017/02/28 Python
django使用图片延时加载引起后台404错误
2017/04/18 Python
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
Python获取指定字符前面的所有字符方法
2018/05/02 Python
Python中的TCP socket写法示例
2018/05/11 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
python解释器安装教程的方法步骤
2020/07/02 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
Windows和Linux动态库应用异同
2016/07/28 面试题
党校培训自我鉴定范文
2014/04/10 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript