本文实例详细呈报了php中socket的用法,发现成好两种艺术得以创建socket

明天试着写三个 PHP 与 C 语言因而socket通讯的顺序,看过PHP手册,开掘成好两种方法得以创制socket 客户端.

正文实例详细描述了php中socket的用法,分享给大家供大家参考。具体用法如下:

1、通过 fsockopen(卡塔尔(قطر‎ 创设socket连接,然后用 用fputs(卡塔尔 发送音信,用 fgets(卡塔尔国 采取音讯。

一、开启socket

2、通过 socket_create() 建立 socket 连接,然后用 socket_send() or socket_write(State of Qatar 发送音信,用 socket_recv() or socket_read(卡塔尔(قطر‎ 发送音信。

phpinfo(State of Qatar;查看是不是展开了socket增加,不然在php.ini中拉开。

很意外,小编在手册上看到了那般意气风发段话"本扩充模块是试错性的。该模块的行事,包罗其函数的称号以至别的任何有关此模块的文书档案大概会在尚未通告的事态下随 PHP 今后的公布而校订。大家提示您在使用本增添模块的同时自担危害。" 看来 php4.0 socket通信还不是完全稳固。

二、服务器端代码的写法

后天自个儿写的客商端要与服务端做五次通信,作者用地点那么些方法都写了五个顾客端程序,开采当唯有就壹回通信的时候,也正是PHP客商端发送一遍音信,然后选取重返新闻,就关闭连接。这三种方法都能正确火速的兑现效果与利益,但作为若干回通讯时,却有令人侧指标异样,第后生可畏种艺术第二回通信一点也超快就截至了,那一个本人能够通过服务端的输出看出来,可是首次通讯要等上有些分钟技术了事,作者试了一些次都那样,笔者不太知道本身的顺序何地出错了,依旧那几个主意连接就是不符合规律,不过第三种办法做此次通信却飞速,精确!达成的那些的。

复制代码 代码如下:

最终笔者根据 第三种情景写了一个 class

<?php
error_reporting(E_ALL);
set_time_limit(0);
//ob_implicit_flush();

////////////////////////////// File Description //////////////////////////////////////////// Class Name : socket// Version : V1.0// Functional Outline : create socket,and send message to server// Revision history : 2004/12/15 First version created// Current : 2004/12/15 Liu Yongsheng//////////////////////////////////////////////////////////////////////////////////////////class socket{var $socket; //socket 句柄var $sendflag = "";var $recvflag = "";var $response;var $debug = 1;function socket($hostname,$port){ $address = gethostbyname($hostname); $this-socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); $result = socket_connect($this-socket,$address,$port); if($this-debug == 1){ if ($result 0) { echo "socket_connect() failed./nReason: ($result) " . socket_strerror($result) . "br"; } else{ echo "connect OK.br"; } } }function sendmsg($msg){ socket_write($this-socket,$msg,strlen($msg)); $result = socket_read($this-socket,100); $this-response = $result; if($this-debug == 1){ printf("font color=#CCCCCC%s $msg/fonbr",$this-sendflag); printf("font color=blue%s $result/fontbr",$this-recvflag); } return $result;}function close(){ socket_close($this-socket);}

$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 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);
?>

服务器端须求在cli格局是实行,有极大希望cli模式下php.ini文件载入的不相似

能够像如下输出:

图片 1

那时在zhoxh目录下就有个tem.text文件。查看 Configuration File (php.ini卡塔尔(قطر‎Path => C:WINDOWS 。不是自己的php.ini 文件,那表达调用的php.ini文件时不当的。当时大家要内定php.ini文件命令如下

图片 2

在乎的是本身的php可以直接施行时计划了意况变量。

三、客户端

复制代码 代码如下:

<?php
//error_reporting(E_ALL);
echo "<h2>tcp/ip connection </h2>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 = "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";

实行结果如下:
server:

图片 3

client:

图片 4

企望本文所述对大家的PHP程序设计具备助于。

本文由美高梅4688官方网站发布于最新话题,转载请注明出处:本文实例详细呈报了php中socket的用法,发现成好两种艺术得以创建socket

您可能还会对下面的文章感兴趣: