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初学者(入门学习经验谈)
Oct 12 PHP
apache mysql php 源码编译使用方法
May 03 PHP
php使HTML标签自动补全闭合函数代码
Oct 04 PHP
ThinkPHP整合百度Ueditor图文教程
Oct 21 PHP
php使用cookie保存登录用户名的方法
Jan 26 PHP
php单文件版在线代码编辑器
Mar 12 PHP
使用php实现从身份证中提取生日
May 09 PHP
PHP session会话操作技巧小结
Sep 27 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
Apr 06 PHP
php并发加锁问题分析与设计代码实例讲解
Feb 26 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列出MySQL中所有数据库的方法
2015/03/12 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
2012/10/11 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
jQuery删除节点用法示例(remove方法)
2016/09/08 Javascript
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
如何在Angular2中使用jQuery及其插件的方法
2017/02/09 Javascript
利用vueJs实现图片轮播实例代码
2017/06/03 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
Python中input和raw_input的一点区别
2014/10/21 Python
Python写的服务监控程序实例
2015/01/31 Python
详解python实现读取邮件数据并下载附件的实例
2017/08/03 Python
DataFrame 将某列数据转为数组的方法
2018/04/13 Python
Matplotlib animation模块实现动态图
2021/02/25 Python
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
波兰快递服务:Globkurier.pl
2019/11/08 全球购物
电脑专业个人求职信范文
2014/02/04 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
计算机专业应届生求职信
2014/04/06 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
Go各时间字符串使用解析
2021/04/02 Golang
python实现会员管理系统
2022/03/18 Python