好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>CMS系统>Dedecms
<tfoot draggable='sEl'></tfoot>

phpsocket5 php socket

很多站长朋友们都不太清楚phpsocket5,今天小编就来给大家整理phpsocket5,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 用php socket制作聊天室。 2、 php socket_select怎么理解 3、 关于php中socket的问题: 4、 php要让服务器使用socket要怎么配置 5、 html5的websocket和php的socket分别完成客户端与服务器端的通信过程。 用php socket制作聊天室。

何必自讨苦吃呢?php 制作聊天室,关键技术是页面局部自动刷新。

通过php ajax技术,就可以完美的达到你的要求。

具体原理如下,在网页聊天框,被ajax调用,ajax传递参数一个php页面,这个页面同时调用数据库,将数据库中新内容返回到页面聊天框中。

然后你可以自己调时间了,是20秒访问一次数据库,还是10秒访问一次数据库。

至于php的socket技术,说实话,我接触php 8年了,没碰过。

我想,关键不是用什么技术,关键是解决问题。

希望对你有用。

php socket_select怎么理解

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文件载入的不一样

可以像如下输出:

这时候在zhoxh目录下就有个tem.text文件。查看 Configuration File (php.ini) Path => C:\WINDOWS 。不是我的php.ini 文件,这说明调用的php.ini文件时错误的。这时候我们要指定php.ini文件命令如下

注意的是我的php可以直接执行时配置了环境变量。

客户端

例如:

<?php

//error_reporting(E_ALL);

echo "<strong>tcp/ip connection </strong>\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 .= "HOST: localhost \r\n";

$in .= "Connection: close\r\n\r\n";

$out = "";

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";

?>

关于php中socket的问题:

这是socket的服务端的代码,监听的ip地址是192.168.168.121,端口号为8528

请检查以下几点

这个ip是不是代码所在服务器的ip,一般监测内网ip,如127.0.0.1

端口号是否被使用,可以使用cmd命令 netstat -ano|findstr 8528  查找端口号为8528的端口使用情况

如果要给在公网上使用,请使用公网ip,这样可以外网使用

如果代码不报错可以试下telnet下你的端口号,看是否可以使用

如 telnet 127.0.0.1 8528

解决方案

查看你电脑的ip地址,把上面代码里“$address = '192.168.168.121';”这个ip地址换成“$address = '127.0.0.1';”或者你电脑的ip地址,再试试。

(ip地址改成127.0.0.1后,这段代码在我电脑上可以使用)

php要让服务器使用socket要怎么配置

socket服务器的工作方式是这样的,不间断地运行以等待客户端的连接。一旦客户端连接上了,服务器就会将它添加到客户名单中,然后开始等待来自客户端的消息。

下面是完整的源代码:

// Set time limit to indefinite execution

set_time_limit (0);

// Set the ip and port we will listen on

$address = 'localhost';

$port = 10000;

$max_clients = 10;

// Array that will hold client information

$client = Array();

// Create a TCP Stream socket

$sock = socket_create(AF_INET, SOCK_STREAM, 0);

// Bind the socket to an address/port

socket_bind($sock, $address, $port) or die('Could not bind to address');

// Start listening for connections

socket_listen($sock);

echo "Waiting for connections...\r\n";

// Loop continuously

while (true) {

// Setup clients listen socket for reading

$read[0] = $sock;

for ($i = 0; $i < $max_clients; $i++) {

if (isset($client[$i]['sock']))

$read[$i + 1] = $client[$i]['sock'];

}

// Set up a blocking call to socket_select()

if (socket_select($read, $write = NULL, $except = NULL, $tv_sec = 5) < 1)

continue;

/* if a new connection is being made add it to the client array */

if (in_array($sock, $read)) {

for ($i = 0; $i < $max_clients; $i++) {

if (empty($client[$i]['sock'])) {

$client[$i]['sock'] = socket_accept($sock);

echo "New client connected $i\r\n";

break;

}

elseif ($i == $max_clients - 1)

echo "Too many clients...\r\n";

}

} // end if in_array

// If a client is trying to write - handle it now

for ($i = 0; $i < $max_clients; $i++) { // for each client

if (isset($client[$i]['sock'])) {

if (in_array($client[$i]['sock'], $read)) {

$input = socket_read($client[$i]['sock'], 1024);

if ($input == null) {

echo "Client disconnecting $i\r\n";

// Zero length string meaning disconnected

unset($client[$i]);

} else {

echo "New input received $i\r\n";

// send it to the other clients

for ($j = 0; $j < $max_clients; $j++) {

if (isset($client[$j]['sock']) $j != $i) {

echo "Writing '$input' to client $j\r\n";

socket_write($client[$j]['sock'], $input, strlen($input));

}

}

if ($input == 'exit') {

// requested disconnect

socket_close($client[$i]['sock']);

}

}

} else {

echo "Client disconnected $i\r\n";

// Close the socket

socket_close($client[$i]['sock']);

unset($client[$i]);

}

}

}

} // end while

// Close the master sockets

socket_close($sock);

可以先将它分解为几个较小的部分。

第一部分是创建服务器。Lines:2至20。

这部分代码设置了变量、地址、端口、最大客户端和客户端数组。接下来创建socket并将其绑定到我们指定的地址和端口上。

下面我们要做的事情就是执行一个死循环(实际上我们是故意的!)。Lines:22至32。

在这部分代码中我们做的第一步是设置 $read 数组。此数 组包含所有客户端的套接字和我们主服务器的套接字。这个变量稍后会用于select语句:告诉PHP监听来自这些客户端的每一条消息。

socket_select()的最后一个参数告诉我们的服务器在返回值之前最多等待5秒钟。如果它的返回值小于1,那么就表示没有收到任何数据,所以只需要返回循环顶部,继续等待。

脚本的下一个部分,是增加新的客户端到数组中。Lines:33至44。

将新的客户端放置在列表的末尾。检查以确保客户端的数量没有超过我们想要服务器处理的数量。

下面要介绍的代码块相当大,也是服务器的主要部分。当客户端将消息发送到服务器时,就需要这块代码挺身而出来处理。消息可以是各种各样的,断开消息、实际断开——只要是服务器需要处理的消息。Lines:46至末尾。

代码循环通过每个客户端并检查是否收到来自于它们的消息。如果是,获取输入的内容。根据输入来检查这是否是一个断开消息,如果是那就从数组中删除它们,反之,那它就是一个正常的消息,那我们的服务器再次通过所有客户端,并一个一个写信息给他们,跳过发送者。

html5的websocket和php的socket分别完成客户端与服务器端的通信过程。

<?php

echo ' web-root = '.$_SERVER['DOCUMENT_ROOT'].'<br>';

echo ' current-file = '.__FILE__.'<br>';

echo ' current-dir = '.dirname(__FILE__).'<br>';

echo ' http-root = '.$_SERVER['HTTP_HOST'].'<br>';

echo ' web-position = '.$_SERVER['PHP_SELF'].'<br>';

$file='c:/webroot/index.php';

echo ' file-position = '.$file.'<br>';

$fileWebAddress='http://'.str_replace($_SERVER['DOCUMENT_ROOT'],$_SERVER['HTTP_HOST'],$file);

echo ' file-web-position = '.$fileWebAddress.'<br>';

?>

关于phpsocket5的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于phpsocket5 php socket的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did165422
更新时间:2023-02-17   阅读:45次

上一篇: php开发dll php开发桌面应用程序

下一篇:php语言技术工程师交流 php技术开发工程师

相关资讯

最新资料更新

  • 1.dedecms如何把文章批量设为未审核的办法
  • 2.DEDE列表调用有缩图显示缩图,无缩图则不显示缩图的方法
  • 3.windowsxp下织梦后台如何安装
  • 4.dedecms列表页调用文章正文内容的方法
  • 5.dedecms常用sql语句汇总
  • 6.dedecms安装运行详细图文教程
  • 7.详解DEDECMS 多行导航菜单栏的实现方法
  • 8.DEDE列表页及文章页调用TAG标签并加入自己的样式
  • 9.DedeCms自定义字段调用长度截取方法
  • 10.dede编辑器换成kindEditor编辑器的方法图解
  • 11.dedecms中英文网站之中英文搜索结果实现方法
  • 12.详解织梦标签{dede:freelist/}列表调用增加排序方式的代码
  • 13.dedecms关闭后台/会员/留言/板验证码的方法
  • 14.dedecms随机调用文章数据方法汇总
  • 15.织梦列表页分页错位(分页显示为竖排)的解决方法
  • 16.dedecsm模板中首页如何实现分页的三种方法比较分析
  • 17.dede:list调用body内容的实现方法(图文)
  • 18.dedecms图片集添加水印的方法
  • 19.解决织梦DEDE导航栏默认首页无法高亮的问题
  • 20.dedecms自定义内容模型在首页、列表页及内容调用标签的方法

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://www.haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]