使用这些函数能够解决高层级别函数所不能解决的难题。使用这些函数能够实现类似fopen的功能,你也许有很多方法来实现socket的功能,比如在php中使用cli(command-line interface)来实现的internet守护进程。
resource socket_accept(resource socket)
在你的脚本服务器端中,使用socket_accept接受一个进入的连接。你必须首先产生一个socket,绑定它到一个名字,并且设置它监听一个端口。在块模式中,socket_accept将产生一个唯一接受后的连接。在非块模式中,它没有建立连接则返回false。另外,当你有了一个新的socket资源后就能够进行读写操作。
下面我们将示范一个简单的回显服务器端。它运行在cli(命令行)下面,它在12345端口等待客户端的连接。
socket_accept
bool socket_bind(resource socket, string address, integer port)
这个socket_bind()把一个socket资源绑定在一个地址上。这个socket必须由socket_create()函数返回的一个资源。这个地址必须是一个ip地址或者是一个保存unix socket的路径。如果是运行在internet上的socket,你还必须提供一个端口。
socket_clear_error(resource socket)
这个函数能够清除制定socket的错误,如果没有指定参数,那么将清除所有socket的错误。
socket_close(resource socket)
socket_close函数关闭一个socket并且清除该socket所占用的内存资源。
boolean socket_connect(resource socket, string address, integer port)
这个函数创建一个客户端到一个端口或者socket的连接。你必须提供一个由socket_create产生的socket。这个address参数必须到一个socket的路径或者是一个ip地址。如果是后者,还必须跟一个数字的端口号。
下面例子演示了使用udp协议的连接到游戏服务器然后获取信息的过程。
socket_connect
5,usec=>0));
//connect to the rtcw master server
if(!socket_connect($socket, wolfmaster.idsoftware.com, 27950)){
print(couldnt connect: .
socket_strerror(socket_last_error()) . );
}
//send request for servers
socket_write($socket, xffxffxffxffgetserversx00);
//get servers
$server = array();
while(false !== ($line = @socket_read($socket, 4096))){
//parse data
for($i=22; ($i+5) $ip = ord(substr($line, $i+1, 1)) . . .
ord(substr($line, $i+2, 1)) . . .
ord(substr($line, $i+3, 1)) . . .
ord(substr($line, $i+4, 1));
$port = (ord(substr($line, $i+5, 1)) * 256) +
ord(substr($line, $i+6, 1));
$server[] = array(ip=>$ip, port=>$port);
}
}
print(
. count($server) . servers);
//loop over servers, getting status
foreach($server as $s){
&nb
http://www.bkjia.com/phpjc/508280.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/508280.htmltecharticle这些socket函数直接跟互联网的协议进行发送信息。相对于fopensock的流来讲,他们操作在一个比较底层的级别。通常,他们都是对c 函数进行封...
