php里面的socket编程,php socket编程(一)

Socket函数

socket

socket_create

函数 resource socket_create(int $domain,int $type,int $protocol)domain: AF_INET、AF_INET6、AF_UNIX,*AF (address family)地址族*。

type: SOCK_STREAM、SOCK_DGRAM等,常用SOCK_STREAM,基于字节流的SOCKET类型,也是TCP协议使用的类型

protocol: SOL_TCP、SOL_UDP

socket_bind

函数: bool socket_bind(resource $socket,string $address[,int $port=0])socket: 使用 socket_create 创建的socket资源

address: ip 地址

port: 监听的端口号,web服务器通常为80端口

socket_listen

函数 bool socket_listen(resource $socket[,int $bcklog=0])socket: 使用 socket_create 创建的socket资源

backlog: 等待处理连接队列的最大长度

socket_acccept

函数: resource socket_accept(resource $socket)socket: 使用socket_create创建的socket资源

socket_write

函数: int socket_write(resource $socket,string $buffer[,int $length])socket: 调用 socket_accept 接收的新连接产生 socket 资源

buffer: 写入到 socket 资源中的数据

length: 控制写入到 socket 资源中的 buffer 的长度,如果长度大于 buffer 的容量,则取 buffer 的容量。

socket_close

函数: void socket_close(resource $socket)socket: socket_accept 或者 socket_create 产生的资源,不能用于 stream 资源的关闭。1

2

3

4

5

6

7

8

9

10

11$sock=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);//创建socket资源

socket_bind($sock,"127.0.0.1",80);//绑定端口

socket_listen($sock);//监听端口

for(;;){

$sock=socket_accept($sock);//接收向端口发出的请求

$write_buffer="HTTP/1.0 200 OKrnServer: my_serverrnContent-Type: text/html; charset=utf-8rnrnhello!world";

$socket_write($conn,$write_buffer);//写入数据到socket中

$socket_close($conn);

}

运行:1php server.php

socket_stream

stream_socket_server

一次性创建、绑定端口、监听端口

函数: resource stream_socket_server ( string $local_socket [, int &$errno [, string &$errstr [, int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN [, resource $context ]]]] )local_socket: 协议名://地址:端口号

errno: 错误码

errstr: 错误信息

flags: 只使用该函数的部分功能

context: 使用stream_context_create函数创建的资源流上下文

stream_socket_accept

函数: resource stream_socket_accept ( resource $server_socket [, float $server_socket[,float timeout = ini_get("default_socket_timeout") [, string &$peername ]] )server_socket: 使用stream_socket_server创建的stream资源

timeout: 超时时间

peername: 设置客户端主机名称1

2

3

4

5

6

7

8

9// server.php

$sock = stream_socket_server("tcp://127.0.0.1:80", $errno, $errstr);

for ( ; ; ) {

$conn = stream_socket_accept($sock);

$write_buffer = "HTTP/1.0 200 OKrnServer: my_serverrnContent-Type: text/html; charset=utf-8rnrnhello!world";// http 头信息

fwrite($conn, $write_buffer);

fclose($conn);

}

Note:stream_socket_server和socket_create创建的不是同一种资源,stream_socket_server创建的是stream资源,可以用fwrite、fread、fclose操作该资源. socket_create创建的是socket资源,不是stream资源,所以socket_create创建的资源只能用socket_write、socket_read、socket_close来操作

多进程函数

pcntl_fork

函数:int pcntl_fork(void);

pcntl_fork 会复制当前进程产生另一个进程,称为当前进程的子进程。父进程和子进程都会在该函数后继续运行,该函数在父进程和子进程中的返回值不相同,在父进程中返回的是 fork 出的子进程的进程ID,而在子进程中返回的是0,创建子进程失败时返回-1,创建成功的子进程会复制父进程的数据(堆、栈、静态数据)

pcntl_waitpid 等待返回fork的子进程状态

函数:int pcntl_waitpid(int $pid,int &$status[,int $options=0])

挂起当前进程的执行一直到 pid 指定的进程退出,亦或接收一个信号中断当前进程、调用一个信号处理函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值