代码下载地址:http://pan.baidu.com/s/1dF9dEkL
服务器端 Server.php
<?php
// 设置一些基本的变量 $host="127.0.0.1"; $port=1001;
// 设置超时时间 set_time_limit(0);
// 创建一个Socket
$socket=socket_create(AF_INET,SOCK_STREAM,0) or die("Could not create socket\n");
//绑定Socket到端口
$result=socket_bind($socket,$host,$port) or die("Could not bind to socket\n");
// 开始监听链接
$result=socket_listen($socket,3) or die("Could not set up socket listener\n");
// 另一个Socket来处理通信
$spawn=socket_accept($socket) or die("Could not accept incoming connection\n");
// 获得客户端的输入
$input=socket_read($spawn,1024) or die("Could no read\n");
//向客户端写入响应信息
$output = 'Welcome,this is what you send:( '.$input.' ).';
socket_write($spawn,$output,strlen($output)) or die("Could not write output\n");
// 关闭sockets
socket_close($spawn); socket_close($socket);
?>客户端 Cilent.php
<?php
header("Content-type:text/html;Charset=UTF-8");
class Socket {
private $host;//连接socket的主机
private $port;//socket的端口号
private $error=array();
private $socket=null;//socket的连接标识
private $queryStr="";//发送的数据
public function __construct($host,$port) {
if(!extension_loaded("sockets")){
exit("请打开socket扩展 ");
}
if(empty($host))
exit("请输入目标地址");
if(empty($port))
exit("请输入有效的端口号");
$this->host=$host;
$this->port=$port;
$this->CreateSocket();//创建连接
}
//创建socket
private function CreateSocket(){
!$this->socket&&$this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);//创建socket
$r=@socket_connect($this->socket,$this->host,$this->port);
if($r){
return $r;
}else{
$this->error[]=socket_last_error($this->socket);
return false;
}
}
//向socket服务器写入数据并读取
public function eachMsg($contents){
$this->queryStr="";
$this->queryStr=$contents;
!$this->socket&&$this->CreateSocket();
$contents=$this->fliterSendData($contents);
$result=socket_write($this->socket,$contents,strlen($contents));
if(!intval($result)){
$this->error[]=socket_last_error($this->socket);
return false;
}
$response=socket_read($this->socket,12048);
if(false===$response){
$this->error[]=socket_last_error($this->socket);
return false;
}
return $response;
}
//对发送的数据进行过滤
private function fliterSendData($contents){
//对写入的数据进行处理
return $contents;
}
//所有错误信息
public function getError(){
return $this->error;
}
//最后一次错误信息
public function getLastError(){
return $this->error(count($this->error));
}
//获取最后一次发送的消息
public function getLastMsg(){
return $this->queryStr;
}
public function getHost(){
return $this->host;
}
public function getPort(){
return $this->port;
}
//关闭socket连接
private function close(){
$this->socket&&socket_close($this->socket);//关闭连接
$this->socket=null;//连接资源初始化
}
public function __destruct(){
$this->close();
}
}
$SC = new Socket('127.0.0.1',1001); //打开Socket 连接
$REP = $SC->eachMsg('Hellow'); //发送信息并接收服务器返回的数据
var_dump($REP);
?>首先执行服务器端文件,然后执行客户端文件,O了,就这么简单。