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 file_exists问题杂谈
May 07 PHP
支付宝接口开发集成支付环境小结
Mar 17 PHP
如何在HTML 中嵌入 PHP 代码
May 13 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
Yii安装与使用Excel扩展的方法
Jul 13 PHP
php计算多个集合的笛卡尔积实例详解
Feb 16 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
Laravel5框架添加自定义辅助函数的方法
Aug 01 PHP
PHP中单例模式的使用场景与使用方法讲解
Mar 18 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 13 PHP
如何利用PHP实现上传图片功能详解
Sep 24 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递归算法的详细示例分析
2013/02/19 PHP
php获得url参数中具有&amp;的值的方法
2014/03/05 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
jQuery实现多按钮单击变色
2014/11/27 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
微信小程序开发之toast提示插件使用示例
2017/06/08 Javascript
JavaScript闭包_动力节点Java学院整理
2017/06/27 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
基于 D3.js 绘制动态进度条的实例详解
2018/02/26 Javascript
js闭包学习心得总结
2018/04/17 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
在VUE style中使用data中的变量的方法
2020/06/19 Javascript
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
python3实现ftp服务功能(客户端)
2017/03/24 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
python判断所输入的任意一个正整数是否为素数的两种方法
2019/06/27 Python
python requests使用socks5的例子
2019/07/25 Python
python 调试冷知识(小结)
2019/11/11 Python
python绘制彩虹图
2019/12/16 Python
Python datetime模块使用方法小结
2020/06/18 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
生产副总岗位职责
2013/11/28 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers
Django框架中表单的用法
2022/06/10 Python