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 连接。