摘要:大家都知道不同pc间的通信需要用到套接字sockte来实现,但是服务器一次只能收到一个客户端发来的消息,所以为了能让服务器可以接收多个客户端的连接与消息的传递,我们就引入了多进程并发这样一个概念。听名字就可以知道--需要用到进程,当然也有多线程并发今天我们讲进程的就可以了,线程的同理。
基本原理: 每连接一个客户端,创建一个子进程,子进程负责处理connfd(客户请求)
父进程处理sockfd(连接请求)。
常用函数:
socket() 创建套接字
bind() 绑定本机地址和端口
connect() 建立连接
listen() 设置监听套接字
accept() 接受TCP连接
recv(), read(), recvfrom() 数据接收
send(), write(), sendto() 数据发送
close(), shutdown() 关闭套接字
各函数使用方法和参数返回值:
socket() 创建套接字
int socket (int domain, int type, int protocol);
domain 是地址族
PF_INET // internet 协议
PF_UNIX // unix internal协议
PF_NS // Xerox NS协议
PF_IMPLINK // Interface Message协议
type // 套接字类型
SOCK_STREAM // 流式套接字
SOCK_DGRAM // 数据报套接字
SOCK_RAW // 原始套接字
protocol 参数通常置为0
connect() 建立连接
int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);
返回值:0 或 -1
sockfd : socket返回的文件描述符
serv_addr : 服务器端的地址信息
addrlen : serv_addr的长度
bind() 绑定本机地址和端口
int bind (int sockfd, struct sockaddr* addr, int addrLen);
sockfd 由socket() 调用返回
addr 是指向 sockaddr_in 结构的指针,包含本机IP 地址和端口号
struct sockaddr_in
u_short sin_family // protocol family
u_short sin_port // port number
struct in_addr sin_addr //IP address (32-bits)
addrLen : sizeof (struct sockaddr_in)
listen() 设置监听套接字
sockfint listen (int sockfd, int backlog);
sockfd:监听连接的套