存档

2015年1月 的存档

在php中使用socket进行tcp链接

2015年1月21日 没有评论

今天提供一个php利用socket建立tcp链接的类,当然后面可能会对这个类进行升级。php对C语言的socket操作进行了很好的封装和继承,而且个人感觉使用起来也比C语言方便很多(可能因为我本身就是一个phper而不是一个C语言开发者)。


class TcpScoket{

var $address;

var $port;

var $sock;

var $sockResult;

var $recvMsg='';

function __construct($address,$port=80){
$this->address = $address;
$this->port = $port;

$this->sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if(!$this->sock) $this->getLastError();
$this->sockResult = socket_connect($this->sock,$this->address,$this->port);
if(!$this->sockResult) $this->getLastError();
}

/**
* 发送信息
* @param string $msg 发送信息
* @return mix 成功返回发送字符数,失败返回false
*/
function sendMsg($msg){
$msgLen = strlen($msg);
$num = socket_send($this->sock,$msg,$msgLen,0);
return $num;
}
/**
* 接受信息
* @param integer $len buff长度
* @return string 接受信息
*/
function recvMsg($len=512){

while(true){
$num = @socket_recv($this->sock,$buffer,$len,0);
if($num){
$this->recvMsg.=$buffer;
}else{
break;
}
}

return $this->recvMsg;
}

/**
* 获得上次的socket错误
* @return void
*/
function getLastError(){
$error = socket_last_error();
echo socket_strerror($error);
exit;
}

function __destruct(){
socket_close($this->sock);
}

}// end of class

使用它也是非常简单的,下面给出一个很简单的example,当然也欢迎大家补充.


$tcp = new TcpScoket("127.0.0.1",5730);
$tcp->sendMsg("你好");
echo $tcp->recvMsg();

分类: PHP 标签: