首页 理论教育 PHP企业级应用:Socket编程API简述

PHP企业级应用:Socket编程API简述

时间:2023-11-21 理论教育 版权反馈
【摘要】:int Socket;根据指定的地址族、数据类型和协议来分配一个Socket的描述字及其所用的资源。

PHP企业级应用:Socket编程API简述

1.Socket编程API

前面提到Socket是"打开—读/写—关闭"模式的实现,简单了解一下Socket提供了哪些API供应用程序使用,还是以TCP协议为例,看看Unix下的Socket API,其它语言都很类似(PHP甚至名字都几乎一样),这里我就简单解释一下方法作用和参数,具体使用有兴趣同学可以看看博客参考中的链接或者上网搜索

int Socket(int domain,int type,int protocol);

根据指定的地址族、数据类型和协议来分配一个Socket的描述字及其所用的资源。

domain:协议族,常用的有AF_INET、AF_INET6、AF_LOCAL、AF_ROUTE其中AF_INET代表使用ipv4地址。

type:Socket类型,常用的Socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等。

protocol:协议。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等。

int bind(int sockfd,const struct sockaddr*addr,socklen_t addrlen);

2.把一个地址族中的特定地址赋给Socket

sockfd:Socket描述字,也就是Socket引用

addr:要绑定给sockfd的协议地址

addrlen:地址的长度

通常服务器在启动的时候都会绑定一个众所周知的地址(如ip地址+端口号),用于提供服务,客户就可以通过它来接连服务器;而客户端就不用指定,有系统自动分配一个端口号和自身的ip地址组合。这就是为什么通常服务器端在listen之前会调用bind(),而客户端就不会调用,而是在connect()时由系统随机生成一个。

int listen(int sockfd,int backlog);

3.监听Socket

sockfd:要监听的Socket描述字

backlog:相应Socket可以排队的最大连接个数

int connect(int sockfd,const struct sockaddr*addr,socklen_t addrlen);

4.连接某个Socket

sockfd:客户端的Socket描述字(www.xing528.com)

addr:服务器的Socket地址

addrlen:Socket地址的长度

int accept(int sockfd,struct sockaddr*addr,socklen_t*addrlen);

5.TCP服务器监听到客户端请求之后,调用accept()函数取接收请求

sockfd:服务器的Socket描述字

addr:客户端的Socket地址

addrlen:Socket地址的长度

ssize_t read(int fd,void*buf,size_t count);

6.读取Socket内容

fd:Socket描述字

buf:缓冲区

count:缓冲区长度

ssize_t write(int fd,const void*buf,size_t count);

7.向Socket写入内容,其实就是发送内容

fd:Socket描述字

buf:缓冲区

count:缓冲区长度

int close(int fd);

Socket标记为以关闭,使相应Socket描述字的引用计数-1,当引用计数为0的时候,触发TCP客户端向服务器发送终止连接请求。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈