socket编程2
客户端服务端编程模型:
服务器调用序列 客户端调用序列
1. 调用socket函数创建套接字 1. 调用socket函数创建套接字
2. 调用bind函数绑定本地地址和端口 2. 调用connect函数连接服务器
3. 调用listen函数启动监听 3. 调用read/write函数与服务器通信
4. 调用accept函数从已连接队列中提取客户端连接 4. 调用close函数关闭套接字
5. 调用read/write函数与客服端通信
6. 调用close函数关闭套接字
服务器启动监听后,有很多客户端可以连接上来,连接上来的客户端就会放在一个队列里面,调用accept就可以从队列里面提取客户端的连接
socket的创建:
int socket(int domain,int type,int protocol)
成功返回socket的文件描述符,失败-1;
· 参数:
domain:
AF_INET ipv4
AF_INET6 ipv6
type:
SOCK_STREAM:tcp协议,可靠、面向连接的字节流
SOCK_DGRAM:udp协议,无连接、无序、不可靠
protocol:0
绑定地址:
int bind(int sockfd, const struct sockaddr *addr, socklen_t len)
成功返回0,失败-1
在端口上监听:
int listen(int sockfd,int backlog)
成功返回0,失败-1
参数:backlog指定进行客户端连接排队的队列长度
接受连接:
int accept(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict len)
成功返回0,失败-1
客户端连接:
int connect(int sockfd, const struct sockaddr *addr,socklen_t len)
成功返回0,失败-1
查找绑定到套接字上的地址:
int getsockname(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict alenp)
成功返回0,失败-1
获取对方地址:
int getpeername(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict alenp)
成功返回0,失败-1