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 相关文章推荐
模仿OSO的论坛(二)
Oct 09 PHP
PHP新手上路(十一)
Oct 09 PHP
PHP数据库调用类调用实例(详细注释)
Jul 12 PHP
浅析is_writable的php实现
Jun 18 PHP
php文件服务实现虚拟挂载其他目录示例
Apr 17 PHP
微信公众号开发之微信公共平台消息回复类实例
Nov 14 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
Mar 18 PHP
开启PHP的伪静态模式
Dec 31 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
Sep 02 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
PHP中str_split()函数的用法讲解
Apr 11 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
Apr 06 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与php MySQL 之间的关系
2009/07/17 PHP
php 文章调用类代码
2011/08/11 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
2018/07/30 PHP
PHP 文件上传限制问题
2019/09/01 PHP
JavaScript中“+=”的应用
2007/02/02 Javascript
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
js计算两个时间之间天数差的实例代码
2013/11/19 Javascript
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
jQuery删除节点用法示例(remove方法)
2016/09/08 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
async/await与promise(nodejs中的异步操作问题)
2017/03/03 NodeJs
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
Angular4学习笔记router的简单使用
2018/03/30 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
python redis 删除key脚本的实例
2019/02/19 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
Python多重继承之菱形继承的实例详解
2020/02/12 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
python读取配置文件方式(ini、yaml、xml)
2020/04/09 Python
Python 求向量的余弦值操作
2021/03/04 Python
美国宠物用品网站:Value Pet Supplies
2018/03/17 全球购物
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
营销总监岗位职责范本
2014/02/26 职场文书
教师专业自荐信
2014/05/31 职场文书
出生证明格式
2015/06/15 职场文书
处理canvas绘制图片模糊问题
2022/05/11 Javascript