您的位置:首页 > 编程语言 > PHP开发

php中socket的使用

2012-11-21 15:59 323 查看
一、开启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="<fontcolor='red'>serversend:welcome</font><br/>";
socket_write($msgsock,$msg,strlen($msg));
echo'readclientmessage\n';
$buf=socket_read($msgsock,8192);
$talkback="receivedmessage:$buf\n";
echo$talkback;
if(false===socket_write($msgsock,$talkback,strlen($talkback))){
echo"socket_write()failedreason:".socket_strerror(socket_last_error($sock))."\n";
}else{
echo'sendsuccess';
}
socket_close($msgsock);
}while(true);
//关闭socket
socket_close($sock);

?>


服务器端需要在cli模式是执行,有可能cli模式下php.ini文件载入的不一样
可以像如下输出



这时候在zhoxh目录下就有个tem.text文件。查看ConfigurationFile(php.ini)Path=>C:\WINDOWS。不是我的php.ini文件,这说明调用的php.ini文件时错误的。这时候我们要指定php.ini文件命令如下




注意的是我的php可以直接执行时配置了环境变量。

三、客户端

<?php
//error_reporting(E_ALL);
echo"<h2>tcp/ipconnection</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"Attemptingtoconnectto'$address'onport'$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.1\r\n";
$in.="HOST:localhost\r\n";
$in.="Connection:close\r\n\r\n";
$out="";
echo"sendinghttpheadrequest...";
socket_write($socket,$in,strlen($in));
echo"OK\n";

echo"Readingresponse:\n\n";
while($out=socket_read($socket,8192)){
echo$out;
}
echo"closeingsocket..";
socket_close($socket);
echo"ok.\n\n";


执行结果:

server:






client:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: