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实现的在线人员函数库
Apr 09 PHP
基于PHP静态类的原罪详解
May 06 PHP
Yii中render和renderPartial的区别
Sep 03 PHP
php中字符串和正则表达式详解
Oct 23 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
May 27 PHP
php生成图片验证码
Jun 09 PHP
在Debian系统下配置LNMP的教程
Jul 09 PHP
PHP使用Pear发送邮件(Windows环境)
Jan 05 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
Feb 26 PHP
PHP单例模式定义与使用实例详解
Feb 06 PHP
php从数据库中读取特定的行(实例)
Jun 02 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 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读取文件内容后清空文件示例代码
2014/03/18 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
JS获取select-option-text_value的方法
2013/12/26 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
2014/01/14 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
详解angular如何调用HTML字符串的方法
2018/06/30 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
Javascript和jquery在selenium的使用过程
2019/10/31 jQuery
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
Python日期时间Time模块实例详解
2019/04/15 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
结婚典礼证婚词
2014/01/11 职场文书
咖啡厅创业计划书范本
2014/01/22 职场文书
产品质量承诺书
2014/03/27 职场文书
2014年基层党组织公开承诺书
2014/03/29 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
学习型党组织心得体会
2014/09/12 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL