107 lines
2.2 KiB
PHP
107 lines
2.2 KiB
PHP
|
<?php
|
|||
|
namespace Workerman\Connection;
|
|||
|
|
|||
|
use Workerman\Events\Libevent;
|
|||
|
use Workerman\Events\Select;
|
|||
|
use Workerman\Events\EventInterface;
|
|||
|
use Workerman\Worker;
|
|||
|
use \Exception;
|
|||
|
|
|||
|
/**
|
|||
|
* udp连接类(udp实际上是无连接的,这里是为了保持与TCP接口一致)
|
|||
|
* @author walkor<walkor@workerman.net>
|
|||
|
*/
|
|||
|
class UdpConnection extends ConnectionInterface
|
|||
|
{
|
|||
|
/**
|
|||
|
* 应用层协议
|
|||
|
* 值类似于 Workerman\\Protocols\\Http
|
|||
|
* @var string
|
|||
|
*/
|
|||
|
public $protocol = '';
|
|||
|
|
|||
|
/**
|
|||
|
* udp socket 资源
|
|||
|
* @var resource
|
|||
|
*/
|
|||
|
protected $_socket = null;
|
|||
|
|
|||
|
/**
|
|||
|
* 对端 ip
|
|||
|
* @var string
|
|||
|
*/
|
|||
|
protected $_remoteIp = '';
|
|||
|
|
|||
|
/**
|
|||
|
* 对端 端口
|
|||
|
* @var int
|
|||
|
*/
|
|||
|
protected $_remotePort = 0;
|
|||
|
|
|||
|
/**
|
|||
|
* 对端 地址
|
|||
|
* 值类似于 192.168.10.100:3698
|
|||
|
* @var string
|
|||
|
*/
|
|||
|
protected $_remoteAddress = '';
|
|||
|
|
|||
|
/**
|
|||
|
* 构造函数
|
|||
|
* @param resource $socket
|
|||
|
* @param string $remote_address
|
|||
|
*/
|
|||
|
public function __construct($socket, $remote_address)
|
|||
|
{
|
|||
|
$this->_socket = $socket;
|
|||
|
$this->_remoteAddress = $remote_address;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 发送数据给对端
|
|||
|
* @param string $send_buffer
|
|||
|
* @return void|boolean
|
|||
|
*/
|
|||
|
public function send($send_buffer)
|
|||
|
{
|
|||
|
return strlen($send_buffer) === stream_socket_sendto($this->_socket, $send_buffer, 0, $this->_remoteAddress);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获得对端 ip
|
|||
|
* @return string
|
|||
|
*/
|
|||
|
public function getRemoteIp()
|
|||
|
{
|
|||
|
if(!$this->_remoteIp)
|
|||
|
{
|
|||
|
list($this->_remoteIp, $this->_remotePort) = explode(':', $this->_remoteAddress, 2);
|
|||
|
}
|
|||
|
return $this->_remoteIp;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获得对端端口
|
|||
|
*/
|
|||
|
public function getRemotePort()
|
|||
|
{
|
|||
|
if(!$this->_remotePort)
|
|||
|
{
|
|||
|
list($this->_remoteIp, $this->_remotePort) = explode(':', $this->_remoteAddress, 2);
|
|||
|
}
|
|||
|
return $this->_remotePort;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 关闭连接(此处为了保持与TCP接口一致,提供了close方法)
|
|||
|
* @void
|
|||
|
*/
|
|||
|
public function close($data = null)
|
|||
|
{
|
|||
|
if($data !== null)
|
|||
|
{
|
|||
|
$this->send($data);
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|