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 遍历数据表数据并列表横向排列的代码
Sep 05 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
php+xml编程之xpath的应用实例
Jan 24 PHP
学习php设计模式 php实现抽象工厂模式
Dec 07 PHP
PHP模拟post提交数据方法汇总
Feb 16 PHP
Smarty环境配置与使用入门教程
May 11 PHP
yii2实现根据时间搜索的方法
May 25 PHP
PHP版微信小店接口开发实例
Nov 12 PHP
php获取文件名称和扩展名的方法
Feb 07 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 PHP
实例说明js脚本语言和php脚本语言的区别
Apr 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
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
Php-Redis安装测试笔记
2015/03/05 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
Laravel 队列使用的实现
2019/01/08 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
Yii框架where查询用法实例分析
2019/10/22 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
使用js的replace()方法查找字符示例代码
2013/10/28 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
webpack 2.x配置reactjs基本开发环境详解
2017/08/08 Javascript
老生常谈javascript的面向对象思想
2017/08/22 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
详解webpack运行Babel教程
2018/06/13 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
TypeScript中使用getElementXXX()的示例代码
2019/09/12 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
Python psutil模块简单使用实例
2015/04/28 Python
python去除所有html标签的方法
2015/05/05 Python
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
Python函数式编程
2017/07/20 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
zooplus意大利:在线宠物商店
2019/08/07 全球购物
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
项目建议书范文
2014/05/12 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
实习生辞职信范文
2015/03/02 职场文书
2016年清明节寄语
2015/12/04 职场文书
《彼得与狼》教学反思
2016/02/20 职场文书