本文实例讲述了php中Socket创建与监听实现方法。分享给大家供大家参考。具体如下:
$ip=”127.0.0.1″; //定义ip地址
$port=1000; //定义端口
$socket=socket_create(af_inet,sock_stream,sol_tcp); //创建socket
$bind=socket_bind($socket,$ip,$prot); //绑定一个socket
$listen=socket_listen($socket); //监听socket
$msg=socket_accept($socket); //接受一个socket连接
$welcome=”欢迎来到php服务/n”; //定义字符串
socket_write($msg,$welcome,strlen($welcome)); //写入一个socket
socket_close($socket); //关闭socket
2个php测试文件
server.php
这里提供了在php中socket相关函数的一个实例,如创建Socket,接受一个socket连接
,写入一个Socket及初始化连接等操作,具体实例代码如下:复制代码 代码如下:$ip=”127.0.0.1″; //定义ip地址
$port=1000; //定义端口
$socket=socket_create(af_inet,sock_stream,sol_tcp); //创建socket
$bind=socket_bind; //绑定一个socket $listen=socket_listen;
//监听socket $msg=socket_accept; //接受一个socket连接
$welcome=”欢迎来到php服务/n”; //定义字符串
socket_write($msg,$welcome,strlen; //写入一个socket socket_close;
//关闭socket */ $ip=”127.0.0.1″; //定义ip地址 $port=1000; //定义端口
$socket=socket_create(af_inet,sock_stream,sol_tcp); //创建socket
socket_clear_error; //清空socket错误信息 socket_close; //关闭socket
/* */ $sockets=array(); //定义一个数组
/*建立一对socket,并存储在数组中*/
if(!socket_create_pair(af_unix,sock_stream,0,$sockets))
//如果socket没有成功创建 { echo socket_strerror; //输出错误信息 }
/*使用创建的socket收发信息*/
if(!socket_write($sockets[0],”abcdef123n”,strlen
//如果执行socket写失败{ cho socket_strerror; //输出错误信息 }
if(!$data=socket_read($sockets[1],strlen,php_binary_read))
//如果读取信息失败 { echo socket_strerror; //输出错误信息 } var_dump;
//输出socket数据信息 /*关闭socket*/ socket_close; //关闭socket1
socket_close; //关闭socket2 /* */ $ip=”127.0.0.1″; //定义ip地址
$port=1000; //定义端口
$socket=socket_create(af_inet,sock_stream,sol_tcp); //创建socket
socket_set_nonblock; //设置不锁定状态 socket_connect; //初始化连接
socket_set_block; //锁定socket switch(socket_select,$w=array,$f=array
{ case 2: echo “连接被拒绝!n”; break; case 1: echo “成功连接n”; break;
case 0: echo “连接超时n”; break; } /* */
/*以下代码定义一个socket监听类*/ class socketlistener extends socket {
function __construct //定义__construct方法 {
$this->stream=@socket_create_listen; //打开端口接受连接 } function
isactive() //定义isactive方法 { if //如果有连接 { return true;
//返回真值 } else //无连接 { return false; //返回假值 } } }
/*
复制代码 代码如下:
希望本文所述对大家的php程序设计有所帮助。
*/
<?php
//phpinfo();
//确保在连接客户端时不会超时
set_time_limit(0);
$ip=”127.0.0.1″; //定义ip地址
$port=1000; //定义端口
$socket=socket_create(af_inet,sock_stream,sol_tcp); //创建socket
socket_clear_error($socket); //清空socket错误信息
socket_close($socket); //关闭socket
$ip = ‘127.0.0.1’;
$port = 1935;
/*
/*
+——————————-
* @socket通信整个过程
+——————————-
* @socket_create
* @socket_bind
* @socket_listen
* @socket_accept
* @socket_read
* @socket_write
* @socket_close
+——————————–
*/
*/
$sockets=array(); //定义一个数组
/*建立一对socket,并存储在数组中*/
if(!socket_create_pair(af_unix,sock_stream,0,$sockets)) //如果socket没有成功创建
{
www.2979.com , echo socket_strerror(socket_last_error()); //输出错误信息
}
/*使用创建的socket收发信息*/
if(!socket_write($sockets[0],”abcdef123n”,strlen(“abcdef123n”))) //如果执行socket写失败
{
cho socket_strerror(socket_last_error()); //输出错误信息
}
if(!$data=socket_read($sockets[1],strlen(“abcdef123n”),php_binary_read)) //如果读取信息失败
{
echo socket_strerror(socket_last_error()); //输出错误信息
}
var_dump($data); //输出socket数据信息
/*关闭socket*/
socket_close($sockets[0]); //关闭socket1
socket_close($sockets[1]); //关闭socket2
/*—————- 以下操作都是手册上的 ——————-*/
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
echo “socket_create()
失败的原因是:”.socket_strerror($sock).”n”;
}
/*
*/
if(($ret = socket_bind($sock,$ip,$port)) < 0) {
echo “socket_bind() 失败的原因是:”.socket_strerror($ret).”n”;
}
$ip=”127.0.0.1″; //定义ip地址
$port=1000; //定义端口
$socket=socket_create(af_inet,sock_stream,sol_tcp); //创建socket
socket_set_nonblock($socket); //设置不锁定状态
socket_connect($socket,$ip,$port); //初始化连接
socket_set_block($sock); //锁定socket
switch(socket_select($r=array($socket),$w=array($socket),$f=array($socket),5))
{
case 2:
echo “连接被拒绝!n”;
break;
case 1:
echo “成功连接n”;
break;
case 0:
echo “连接超时n”;
break;
}
if(($ret = socket_listen($sock,4)) < 0) {
echo “socket_listen()
失败的原因是:”.socket_strerror($ret).”n”;
}
/*
$count = 0;
*/
do {
if (($msgsock = socket_accept($sock)) < 0) {
echo “socket_accept() failed: reason: ” .
socket_strerror($msgsock) . “n”;
break;
} else {
/*以下代码定义一个socket监听类*/
class socketlistener extends socket
{
function __construct($port=null) //定义__construct方法
{
$this->stream=@socket_create_listen($port?$port:port); //打开端口接受连接
}
function isactive() //定义isactive方法
{
if($this->stream) //如果有连接
{
return true; //返回真值
}
else //无连接
{
return false; //返回假值
}
}
}
//发到客户端
$msg =”测试成功!n”;
socket_write($msgsock, $msg, strlen($msg));
echo “测试成功了啊金沙国际唯一官网网址 ,n”;
$buf = socket_read($msgsock,8192);
$talkback = “收到的信息:$bufn”;
【www.2979.com】 //定义端口,具体实例代码如下。 echo $talkback;
if(++$count >= 5){
break;
};
}
//echo $buf;
socket_close($msgsock);
} while (true);
socket_close($sock);
?>
client.php
复制代码 代码如下:
<?php
error_reporting(E_ALL);
set_time_limit(0);
echo “<h2>TCP/IP Connection</h2>n”;
$port = 1935;
$ip = “127.0.0.1”;
/*
+——————————-
* @socket连接整个过程
+——————————-
* @socket_create
* @socket_connect
* @socket_write
* @socket_read
* @socket_close
+——————————–
*/
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
echo “socket_create() failed: reason: ” . socket_strerror($socket)
. “n”;
}else {
echo “OK.n”;
}
echo “试图连接 ‘$ip’ 端口 ‘$port’…n”;
$result = socket_connect($socket, $ip, $port);
if ($result < 0) {
echo “socket_connect() failed.nReason: ($result) ” .
socket_strerror($result) . “n”;
}else {
echo “连接OKn”;
}
$in = “Horn”;
$in .= “first bloodrn”;
$out = ”;
if(!socket_write($socket, $in, strlen($in))) {
echo “socket_write() failed: reason: ” . socket_strerror($socket)
. “n”;
}else {
echo “发送到服务器信息成功!n”;
echo “发送的内容为:<font color=’red’>$in</font>
<br>”;
}
while($out = socket_read($socket, 8192)) {
echo “接收服务器回传信息成功!n”;
echo “接受的内容为:”,$out;
}
echo “关闭SOCKET…n”;
socket_close($socket);
echo “关闭OKn”;
?>
侦听
复制代码 代码如下:
# /usr/local/php/bin/php /usr/local/apache2/htdocs/server.php
![]() |
请求
复制代码 代码如下:
# /usr/local/php/bin/php /usr/local/apache2/htdocs/client.php
默认PHP是没有开启Socket的
复制代码 代码如下:
#cd ./ext/sockets/
# /usr/local/php/bin/phpize
# ./configure –enable-sockets
–with-php-config=/usr/local/php/bin/php-config
# make
# make install
php.ini修改配置
增加
复制代码 代码如下:
extension=sockets.so
重启apache
复制代码 代码如下:
# /usr/local/apache2/bin/apachectl restart
Windows下的配置
修改php.ini
复制代码 代码如下:
extension=php_sockets.dll
重启apache
cmd下起2个
php的安装目录
复制代码 代码如下:
C:/php/php.exe F:web/server.php
C:/php/php.exe F:web/client.php
www.2979.com, 之家, 技巧, 方法, 脚本