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 和 COM
Oct 09 PHP
关于在php.ini中添加extension=php_mysqli.dll指令的说明
Jun 14 PHP
php 购物车的例子
May 04 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
Jan 03 PHP
限制ckeditor上传图片文件大小的方法
Nov 15 PHP
php将session放入memcached的设置方法
Feb 14 PHP
dedecms集成财付通支付接口
Dec 28 PHP
利用PHP如何实现Socket服务器
Sep 23 PHP
php封装的连接Mysql类及用法分析
Dec 10 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
Mar 07 PHP
php验证身份证号码正确性的函数
Jul 20 PHP
PHP依赖注入原理与用法分析
Aug 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
用PHP和ACCESS写聊天室(十)
2006/10/09 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
php+mysql实现简单的增删改查功能
2015/07/13 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
用jquery的方法制作一个简单的导航栏
2014/06/23 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
2016/05/17 Javascript
使用原生的javascript来实现轮播图
2017/02/24 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
vue路由拦截及页面跳转的设置方法
2018/05/24 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
Vue resource三种请求格式和万能测试地址
2018/09/26 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
Python中的元类编程入门指引
2015/04/15 Python
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
python源文件的字符编码知识点详解
2021/03/04 Python
英国女士家居服网站:hush
2017/08/09 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
老师给学生的表扬信
2014/01/17 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
安全施工责任书
2014/08/25 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书