+ -
当前位置:首页 → 问答吧 → php socket的使用(一个简单的小例子)

php socket的使用(一个简单的小例子)

时间:2010-08-31

来源:互联网

SERVER端
<?php
//确保在连接客户端时不会超时  
set_time_limit(0);  

//设置IP和端口号
$address='127.0.0.1';   //改成自己需要的IP
$port=60000;         //调试的时候,可以多换端口来测试程序!

//创建一个SOCKET
if(($sock=socket_create(AF_INET,SOCK_STREAM,SOL_TCP))<0)  
{  
echo "socket_create() 失败的原因是:".socket_strerror($sock)."<br>";  
}  

//绑定到socket端口
if(($ret=socket_bind($sock,$address,$port))<0)  
{  
echo "socket_bind() 失败的原因是:".socket_strerror($ret)."<br>";  
}  
 
 //开始监听
if(($ret=socket_listen($sock,4))<0)  
{  
echo "socket_listen() 失败的原因是:".socket_strerror($ret)."<br>";  
}  
while(true){
do {  
if (($msgsock = socket_accept($sock)) < 0)  
{  
echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";  
break;  
}  

//发到客户端
$msg ="<font color=red>欢迎进入服务器!</font><br>";  
socket_write($msgsock, $msg, strlen($msg));  

echo "读取客户端发来的信息<br>"; 

$buf='';   //定义一个字符串存放传过来的信息
while($data = socket_read($msgsock,8192)){    //soket独到8192就会停止为了防止拥塞所以这样写
$buf .= $data;
}

//下面这段是把传过来的信息写到index.html里面
   $filename="d:\\web\index.html";
if (is_writable($filename)) {
    if (!$handle = fopen($filename, 'w+')) {
         echo "不能打开文件 $filename";
         exit;
    }
    if (fwrite($handle, '') === FALSE) {
        echo "不能写入到文件 $filename";
        exit;
    }
    if (fwrite($handle, $buf) === FALSE) {
        echo "不能写入到文件 $filename";
        exit;
    }
    echo "成功地将 $buf 写入到文件$filename";

//根据条件将其拷贝到另外一台电脑上
 $sindex="z://wwwroot/index.html";
     if(file_exists($sindex)){
    if (!$handle1 = fopen($sindex, 'r')) {
            echo "不能打开文件 $sindex";
           exit;
      }
    $contents = fread($handle1, 100);
   if(strlen(trim($contents))<1){
    $filepath="D://web/";
    $filename1="index.html";
    $myfile=$filepath.$filename1;
    if(file_exists($myfile))
    {
     copy($myfile,"z://wwwroot/".$filename1);
    }
    else
    {
      echo "文件:".$filename1."不存在!";
    }
           fclose($handle);
   }else{
    echo "首页不为空,不须复制";
   }
   fclose($handle1);
  }else{
   echo "文件".$sindex."不存在";
  }
} else {
    echo "文件 $filename 不可写";
}

$buf='';   //清空字符串
$talkback = "收到的信息:$buf<br>";  
echo $talkback;  
  
  
} while (true);  
socket_close($msgsock); 
}
socket_close($sock);  
?> 

CLIENT端
<?php
error_reporting(E_ALL);  
set_time_limit(0);  
echo "<h2>TCP/IP Connection</h2>\n";  
 
//自己设置端口和ip
$service_port = 60000;  
$address = "127.0.0.1";    
  
 
$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 "试图连接 '$address' 端口 '$service_port'...<br>";  
$result = socket_connect($socket, $address, $service_port);  
if ($result < 0)  
{  
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";  
}  
else 
{  
echo "连接OK<br>";  
}  
$in ="";  
 
//打开要传输的文件
  $handle = fopen("d:\\AppServ\www\dede\index.html", "r");
  while (!feof($handle)) {
   $in .= fgets($handle);
}
fclose($handle);
$out = '';  
$out1='';  
 
 
if(!socket_write($socket, $in, strlen($in)))  
{  
echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";  
}  
else 
{  
echo "发送到服务器信息成功!<br>";  
echo "发送的内容为:<font color='red'>$in</font> <br>";  
}  

echo "关闭SOCKET...<br>";  
socket_close($socket);  
echo "关闭OK<br>";  
?> 

作者: 晶贝贝   发布时间: 2010-08-31

学习了.

作者: yangbaojin1988   发布时间: 2010-08-31

有些才华。

作者: mijian   发布时间: 2010-08-31

顶一下

作者: phpzhu   发布时间: 2010-08-31

热门下载

更多