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中使用Oracle数据库(6)
Oct 09 PHP
php adodb连接不同数据库
Mar 19 PHP
php 字符过滤类,用于过滤各类用户输入的数据
May 27 PHP
php通用防注入程序 推荐
Feb 26 PHP
thinkphp实现数组分页示例
Apr 13 PHP
php采用curl实现伪造IP来源的方法
Nov 21 PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 PHP
php类的定义与继承用法实例
Jul 07 PHP
laravel 5.4中实现无限级分类的方法示例
Jul 27 PHP
PHP内置函数生成随机数实例
Jan 18 PHP
详解PHP队列的实现
Mar 14 PHP
PHP中number_format()函数的用法讲解
Apr 08 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 函数语法介绍一
2009/06/14 PHP
php读取html并截取字符串的简单代码
2009/11/30 PHP
解析php入库和出库
2013/06/25 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
Vue.js 利用v-for中的index值实现隔行变色
2018/08/01 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
微信小程序input抖动问题的修复方法
2021/03/03 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
python机器学习之决策树分类详解
2017/12/20 Python
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
python实战教程之自动扫雷
2018/07/13 Python
python 公共方法汇总解析
2019/09/16 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
python模拟斗地主发牌
2020/04/22 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
俄罗斯旅游网站:Tripadvisor俄罗斯
2017/03/21 全球购物
Falconeri美国官网:由羊绒和羊毛制成的针织服装
2018/04/08 全球购物
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
SOKOLOV官网:俄罗斯珠宝首饰品牌
2021/01/02 全球购物
2015年医德考评自我评价
2015/03/03 职场文书
暂住证证明
2015/06/19 职场文书
生产实习心得体会范文
2016/01/22 职场文书
2016企业先进集体事迹材料
2016/02/25 职场文书
2019年年中工作总结讲话稿模板
2019/03/25 职场文书
高中优秀作文(范文)
2019/08/15 职场文书
Go语言特点及基本数据类型使用详解
2022/03/21 Golang