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边学边教》(02.Apache+PHP环境配置――下篇)
Dec 13 PHP
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
May 07 PHP
phpExcel中文帮助手册之常用功能指南
Aug 18 PHP
php根据生日计算年龄的方法
Jul 13 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
thinkphp3.x中session方法的用法分析
May 20 PHP
Laravel实现自定义错误输出内容的方法
Oct 10 PHP
PHP手机号中间四位用星号*代替显示的实例
Jun 02 PHP
Zend Framework框架中实现Ajax的方法示例
Jun 27 PHP
php命令行写shell实例详解
Jul 19 PHP
php+iframe 实现上传文件功能示例
Mar 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 图片水印类代码
2012/08/27 PHP
探寻PHP脚本不报错的原因
2014/06/12 PHP
深入浅析php中sprintf与printf函数的用法及区别
2016/01/08 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
基于mootools插件实现遮罩层新手引导
2012/05/24 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
JS脚本加载后执行相应回调函数的操作方法
2018/02/28 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
原生js滑动轮播封装
2020/07/31 Javascript
Python文件操作类操作实例详解
2014/07/11 Python
Python多线程编程(五):死锁的形成
2015/04/05 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
Python 装饰器使用详解
2017/07/29 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
浅析python继承与多重继承
2018/09/13 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
CSS的background属性及CSS3的背景图片设置总结
2016/06/13 HTML / CSS
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
长青弘远的面试题
2012/06/09 面试题
母亲节演讲稿
2014/05/27 职场文书
统计专业自荐书
2014/07/06 职场文书
买卖合同协议书范本
2014/10/18 职场文书
银行求职自荐信范文
2015/03/04 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL