PHP socket扩展是基于流行的BSD sockets,实现了和socket通讯功能的底层接口,它可以和客户端一样当做一个socket服务器。
一、server.php服务端:
本文实例详细讲述了php中socket的用法,分享给大家供大家参考。具体用法如下:
使用这些函数时请注意,虽然他们中有很多和C函数同名的,但声明却很可能不同。未避免混淆,请仔细阅读函数描述。
代码如下
一、开启socket
不熟悉socket编程的可以在Unix手册上找到很多有用的信息,网上也有很多C socket编程方面的教程,简单修改一下就可以应用于PHP socket编程。
<?php
phpinfo();查看是否开启了socket扩展,否则在php.ini中开启。
第一步:开启socket
error_reporting(E_ALL);
二、服务器端代码的写法
到php.ini开启extension=php_sockets.dll,然后重启apache才能生效。如果没有开启或者重启阿帕奇会出现Call to undefined function socket_create()的报错。
set_time_limit(0);
复制代码 代码如下:
第二步:使用socket
ob_implicit_flush();
<?php
error_reporting(E_ALL);
set_time_limit(0);
//ob_implicit_flush();
PHP socket工作流程是:
//本地IP
$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";
}
1.创建socket socket_create()
$address='localhost';
//绑定
if (socket_bind($sock, $address, $port) === false) {
echo "socket_bind() failed :reason:" .
socket_strerror(socket_last_error($sock)) . "n";
}
2.尝试通过创建的socket连接目标ip socket_connect(),注意了,这里只能写ip,只能写ip,我写localhost就错了。
//设置用111端口进行通信
//监听
if (socket_listen($sock, 5) === false) {
echo "socket_bind() failed :reason:" .
socket_strerror(socket_last_error($sock)) . "n";
}
3.获取连接结果,如果连接成功,我们就可以继续进行自己要做的事情,如果失败,我们做一个后续要做的事情。
$port= 111;
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 messagen';
$buf = socket_read($msgsock, 8192);
$talkback = "received message:$bufn";
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);
?>
4.关闭socket socket_close()
//创建SOCKET
服务器端需要在cli模式是执行,有可能cli模式下php.ini文件载入的不一样
PHP socket请求示例:
if(($sock= socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
可以像如下输出:
<?php
error_reporting(E_ALL);echo "<h2>TCP/IP连接流程</h2>n";
/* 获取网站服务器端口 */
$service_port = getservbyname('www', 'tcp');/* 获取服务器的ip地址. */
$address = gethostbyname('www.wangtuizhijia.com');/* 创建TCP/IP socket. */
$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 "socket_create创建成功n";
}echo "尝试通过'$service_port'端口连接'$address' ..."."<br>";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
echo "socket_connect() 连接失败: ($result) " . socket_strerror(socket_last_error($socket)) . "n";
} else {
echo "连接端口成功."."<br>";
}$in = "HEAD / HTTP/1.1"."<br>";
$in .= "Host: www.wangtuizhijia.com"."<br>";
$in .= "连接关闭"."<br>";
$out = '';echo "发送HTTP HEAD请求..."."<br>";
socket_write($socket, $in, strlen($in));
echo "成功"."<br>";echo "响应信息:"."<br>";
while ($out = socket_read($socket, 2048)) {
echo $out."<br>";
}echo "关闭socket..."."<br>";
socket_澳门新浦京娱乐场网站套接字连接,用PHP的socket实现客户端到服务端的通信实例详解。close($socket);
echo "结束.nn";
?>
echo"socket创建失败原因 ". socket_strerror($sock) ."n";
结果:
}
这时候在zhoxh目录下就有个tem.text文件。查看 Configuration File (php.ini) Path => C:WINDOWS 。不是我的php.ini 文件,这说明调用的php.ini文件时错误的。这时候我们要指定php.ini文件命令如下
TCP/IP连接流程
socket_create创建成功 尝试通过'80'端口连接'103.76.85.67' ...
连接端口成功.
发送HTTP HEAD请求...
成功
响应信息:
HTTP/1.1 400 Bad Request Content-Length: 311 Content-Type: text/html; charset=us-ascii Server: Microsoft-HTTPAPI/2.0 Date: Mon, 08 May 2017 06:17:10 GMT Connection: close
关闭socket...
结束.
if(($ret= socket_bind($sock,$address,$port)) < 0) {
注意的是我的php可以直接执行时配置了环境变量。
本人博客:PHP Socket(套接字连接)扩展简介和使用方法
echo"创建套接字失败原因 ". socket_strerror($ret) ."n";
三、客户端
}
复制代码 代码如下:
//监听
<?php
//error_reporting(E_ALL);
echo "<h2>tcp/ip connection </h2>n";
$service_port = 10005;
$address = '127.0.0.1';
if(($ret= socket_listen($sock, 5)) < 0) {
$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"监听失败原因 ". socket_strerror($ret) ."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.1rn";
$in .= "HOST: localhost rn";
$in .= "Connection: closernrn";
$out = "";
echo "sending http head request ...";
socket_write($socket, $in, strlen($in));
echo "OKn";
}
echo "Reading response:nn";
while ($out = socket_read($socket, 8192)) {
echo $out;
}
echo "closeing socket..";
socket_close($socket);
echo "ok .nn";
do{
执行结果如下:
server:
//接收命令
if(($msgsock= @socket_accept($sock)) < 0) {
client:
echo"命令接收失败原因: ". socket_strerror($msgsock) ."n";
break;
希望本文所述对大家的PHP程序设计有所帮助。
}
您可能感兴趣的文章:
- PHP查看SSL证书信息的方法
- 深入浅出php socket编程
- php socket客户端及服务器端应用实例
- php中Socket创建与监听实现方法
- PHP向socket服务器收发数据的方法
- PHP利用Socket获取网站的SSL证书与公钥
$msg="nPHP Test Server. n"."用quit,shutdown,sun...等命令测试.n";
@socket_write($msgsock,$msg,strlen($msg));
do{
if(false === ($buf= @socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
echo"socket_read() failed: reason: ". socket_strerror($ret) ."n";
break2;
}
if(!$buf= trim($buf)) {
continue;
}
if($buf=='quit') {
break;
}
if($buf=='shutdown') {
socket_close($msgsock);
break2;
}
if($buf=='sun') {
echo'what are you doing?';
}
$talkback="Backinformation : '$buf'.n";
socket_write($msgsock,$talkback,strlen($talkback));
echo"$bufn";
}while(true);
socket_close($msgsock);
}while(true);
socket_close($sock);
?>
二、client.php客户端:
代码如下
<?php
error_reporting(E_ALL);
//端口111
$service_port= 111;
//本地
$address='localhost';
//创建 TCP/IP socket
$socket= socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if($socket< 0) {
echo"socket创建失败原因: ". socket_strerror($socket) ."n";
}else{
echo"OK,HE HE.n";
}
$result= socket_connect($socket,$address,$service_port);
if($result< 0) {
echo"SOCKET连接失败原因: ($result) ". socket_strerror($result) ."n";
}else{
echo"OK.n";
}
//发送命令
$in="HEAD / HTTP/1.1rn";
$in.="Connection: Closernrn";
$out='';
echo"Send Command..........";
$in="sunn";
socket_write($socket,$in,strlen($in));
echo"OK.n";
echo"Reading Backinformatin:nn";
while($out= socket_read($socket, 2048)) {
echo$out;
}
echo"Close socket........";
socket_close($socket);
echo"OK,He He.nn";
?>
这两段代码是简单介绍用PHP实现客户端和服务端的通信
具体操作,在DOS下用PHP命令打开SERVER,处于监听状态..
再打开一个DOS窗口,用PHP命令打开CLIENT,会得到服务端的回应....
本文由澳门新浦京娱乐场网站发布于www.146.net,转载请注明出处:澳门新浦京娱乐场网站套接字连接,用PHP的sock