1创建socket
函数:int socket(int domain,int type,int protocol)
参数说明:domain:告诉系统使用哪个底层协议族 type:指定服务类型,有:SOCK_STREAM(流服务) 和SOCK_UGRAM(数据包服务) tcp:流 udp:数据报
protocol:前两个参数构成的协议集合下,再选择一个具体的协议
返回结果:本函数成功时返回一个socket文件描述符 失败时返回-1
2命名socket
创建socket时,给他指定了地址族,并未指定使用哪个具体的socket地址,将一个socket与socket地址绑定称为给socket命名,服务器通常要命名socket,而客户端不需要,客户端利用os自动分配的socket地址
int bind(int sockfd,const struct sockaddr* my_addr,socklen_t addrlen);
函数说明:将my-addr所指的socket地址分配给未命名的sockfd,addrlen指出该socket地址的长度。
3监听socket
socket命名后,还不能接受客户连接,如下函数创建一个监听队列以存放待处理的客户连接。
int listen(int sockfd,int backlog)
sockfd:指定被监听的sock描述符,backlog提示内核监听队列的最大长度,当监听队列的长度超过这个值之后,就不会继续监听客户端连接,客户也将受到错误信息。
4接受连接
从socket监听队列中接受一个连接:int accept(int scokfd,struct sockaddr *addr,socklen_t *addrlen)
函数说明:sockfd是执行过listen系统调用的监听socket,addr指定被接受连接的远端socket地址,其长度由addrlen指定,
成功时返回一个socket,该socket唯一的标识了被接受连接的远端socket,服务器可通过该socket与远端客户端socket进行通信。
5发起连接
客户端通过connect来与服务器建立连接
int connect(int sockfd,const struct sockaddr* serv_addr,socklen_t addrlen)
函数说明:sockfd由socket系统调用返回一个socket,serv-addr指定服务器监听的socket地址,addrlen指定这个地址的长度。
一旦成功,客户端可通过读写sockfd来与服务端通信。
6关闭连接
int close(int fd)
关闭fd代表的socket;