很多站长朋友们都不太清楚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的详细内容...