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 相关文章推荐
动易数据转成dedecms的php程序
Apr 07 PHP
PHP 身份证号验证函数
May 07 PHP
php ignore_user_abort与register_shutdown_function 使用方法
Jun 14 PHP
将文件夹压缩成zip文件的php代码
Dec 14 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
Jun 26 PHP
PHP上传文件时自动分配路径的方法
Jan 09 PHP
php之static静态属性与静态方法实例分析
Jul 30 PHP
详解PHP的Yii框架中的Controller控制器
Mar 29 PHP
PHP异常类及异常处理操作实例详解
Dec 19 PHP
PHP中有关长整数的一些操作教程
Sep 11 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 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
不用mod_rewrite直接用php实现伪静态化页面代码
2008/10/04 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
PHP实现的AES 128位加密算法示例
2019/09/16 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
Vue 禁用浏览器的前进后退操作
2020/09/04 Javascript
python实现数组插入新元素的方法
2015/05/22 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
python difflib模块示例讲解
2017/09/13 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
python中的global关键字的使用方法
2019/08/20 Python
解决python 读取 log日志的编码问题
2019/12/24 Python
python爬虫添加请求头代码实例
2019/12/28 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
建筑工程技术应届生求职信
2013/11/17 职场文书
咖啡厅创业计划书范本
2014/01/22 职场文书
人事主管岗位职责
2014/01/30 职场文书
创新比赛获奖感言
2014/02/13 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书
授权委托书协议书
2014/10/16 职场文书
2014年个人总结范文
2015/03/09 职场文书
话题作文之呼唤
2019/12/18 职场文书