澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

澳门新浦京娱乐场网站套接字连接,用PHP的sock

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

澳门新浦京娱乐场网站 1

结果:

}

这时候在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...
结束.

  

澳门新浦京娱乐场网站 2

 

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:

  //接收命令 

澳门新浦京娱乐场网站 3

  if(($msgsock= @socket_accept($sock)) < 0) {

client:

    echo"命令接收失败原因: ". socket_strerror($msgsock) ."n";

澳门新浦京娱乐场网站 4

    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,会得到服务端的回应....

澳门新浦京娱乐场网站 5

本文由澳门新浦京娱乐场网站发布于www.146.net,转载请注明出处:澳门新浦京娱乐场网站套接字连接,用PHP的sock