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(一)
Mar 21 PHP
php实现执行某一操作时弹出确认、取消对话框
Dec 30 PHP
Linux下安装oracle客户端并配置php5.3
Oct 12 PHP
php实现Mongodb自定义方式生成自增ID的方法
Mar 23 PHP
Laravel 5 框架入门(四)完结篇
Apr 09 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
Jan 04 PHP
PHP实现通过URL提取根域名
Mar 31 PHP
ThinkPHP中session函数详解
Sep 14 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
搜索附近的人PHP实现代码
Feb 11 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
Aug 04 PHP
laravel利用中间件做防非法登录和权限控制示例
Oct 21 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
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&amp;”)
2016/12/23 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
[57:18]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#3VP VS VG
2016/03/03 DOTA
python根据路径导入模块的方法
2014/09/30 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
使用Python在Windows下获取USB PID&amp;VID的方法
2019/07/02 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
浅谈python3中input输入的使用
2019/08/02 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
python可以用哪些数据库
2020/06/22 Python
python判断元素是否存在的实例方法
2020/09/24 Python
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
幼儿园教师培训制度
2014/01/16 职场文书
大学生新学期计划书
2014/04/28 职场文书
副检察长四风问题对照检查材料思想汇报
2014/10/07 职场文书
2014年大堂经理工作总结
2014/11/21 职场文书
机器人瓦力观后感
2015/06/12 职场文书
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL