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客户端向服务器发送终止连接请求。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。