background image

SOCK_RDM 这个类型是很少使用的,在大部分的操作系统上没有实现,它是提供给数据
链路层使用,不保证数据包的顺序
表三:公共协议
名字/

 

常量 描述

ICMP 互联网控制消息协议,主要使用在网关和主机上,用来检查网络状况和报告错误信

UDP 用户数据报文协议,它是一个无连接,不可靠的传输协议
TCP 传输控制协议,这是一个使用最多的可靠的公共协议,它能保证数据包能够到达接
受者那儿,如果在传输过程中发生错误,那么它将重新发送出错数据包。
现在你知道了产生一个 socket 的三个元素,那么我们就在 php 中使用 socket_create()函数
来产生一个 socket。这个 socket_create()函数需要三个参数:一个协议、一个 socket 类型、一
个公共协议。socket_create()函数运行成功返回一个包含 socket 的资源类型,如果没有成功
则返回 false。
Resourece socket_create(int protocol, int socketType, int commonProtocol);
现在你产生一个 socket,然后呢?php 提供了几个操纵 socket 的函数。你能够绑定 socket 到
一个 IP,监听一个 socket 的通信,接受一个 socket;现在我们来看一个例子,了解函数
是如何产生、接受和监听一个 socket。
代码如下:
 
<?php

$commonProtocol

 = 

getprotobyname

(“tcp”);

$socket

 = socket_create(AF_INET, SOCK_STREAM, 

$commonProtocol

);

socket_bind(

$socket

, ‘localhost', 1337);

socket_listen(

$socket

);

// More socket functionality to come

?>
 
上面这个例子产生一个你自己的服务器端。例子第一行,

$commonProtocol

 = 

getprotobyname

(“tcp”);

使用公共协议名字来获取一个协议类型。在这里使用的是 TCP 公共协议,如果你想使用
UDP 或者 ICMP 协议,那么你应该把

getprotobyname

()

函数的参数改为 udp” “

或 icmp”。还

有一个可选的办法是不使用

getprotobyname

()函数而是指定 SOL_TCP 或 SOL_UDP 在

socket_create()函数中。

$socket

 = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

例子的第二行是产生一个 socket 并且返回一个 socket 资源的实例。在你有了一个 socket 资
源的实例以后,你就必须把 socket 绑定到一个 IP 地址和某一个端口上。
socket_bind(

$socket

, ‘localhost', 1337);

在这里你绑定 socket 到本地计算机(127.0.0.1)和绑定 socket 到你的 1337 端口。然后你就
需要监听所有进来的 socket 连接。