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 相关文章推荐
杏林同学录(三)
Oct 09 PHP
php基础知识:类与对象(2) 自动加载对象
Dec 13 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
Nov 07 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 PHP
php实现水仙花数示例分享
Apr 03 PHP
PHP多线程之内部多线程实例分析
Mar 09 PHP
PHP cURL初始化和执行方法入门级代码
May 28 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
Jul 10 PHP
PHP+Ajax+JS实现多图上传
May 07 PHP
php die()与exit()的区别实例详解
Dec 03 PHP
thinkPHP5.0框架安装教程
Mar 25 PHP
YII框架常用技巧总结
Apr 27 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
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
javascript ie6兼容position:fixed实现思路
2013/04/01 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
基于vue的fullpage.js单页滚动插件
2017/03/20 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
Vuex提升学习篇
2018/01/11 Javascript
vue+springmvc导出excel数据的实现代码
2018/06/27 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
使用jQuery如何写一个含验证码的登录界面
2019/05/13 jQuery
解决一个微信号同时支持多个环境网页授权问题
2019/08/07 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
python3访问sina首页中文的处理方法
2014/02/24 Python
Python自动调用IE打开某个网站的方法
2015/06/03 Python
Python中的枚举类型示例介绍
2019/01/09 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
举例讲解Python常用模块
2019/03/08 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
Python中的四种交换数值的方法解析
2019/11/18 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
银行演讲稿范文
2014/01/03 职场文书
工作检讨书怎么写
2015/01/23 职场文书
明星邀请函
2015/02/02 职场文书
任命书怎么写
2015/03/02 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
Django + Taro 前后端分离项目实现企业微信登录功能
2022/04/07 Python
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL