【ARM&Linux】并发服务器设计

2019-07-12 19:31发布

class="markdown_views prism-atelier-sulphurpool-light">

《网络服务器的并发控制Demo,使用TCP》


1、源代码

/**************************************************************************************** * 文件名: service.c * 创建者: * 时 间: * 联 系: * 简 介: TCP编程模型代码示例,并发服务器控制,函数API参考文档《Unix环境高级编程》 *****************************************************************************************/ /*********************************************************** 函数学习及模型: 1、创建套接字:int socket(int domain, int type, int protocol); 参数一:指明域,例如AF_INET,表示ipv4域 参数二:指明类型,如SOCK_STREAM表示tcp 参数三:参数一和二都指明了,本参数填0 返回值:成功0,失败-1 2、绑定:int bind(int socket, const struct sockaddr *address,socklen_t address_len); 参数一:指明的套接字 参数二:指明服务端地址 参数三:地址长度 返回值:成功0,失败-1 3、等待连接,是阻塞操作:int accept(int socket, struct sockaddr *restrict address,socklen_t *restrict address_len); 参数一:指明套接字 参数二:用于连接成功后,存储客户端地址的信息的结构 参数三:客户端地址长度 返回值:成功0, 失败-1 4、收发数据: ssize_t send(int socket, const void *buffer, size_t length, int flags); ssize_t recv(int socket, void *buffer, size_t length, int flags); 参数:flag一般填0 5、关闭连接:int close(int fildes); 网络字节序一般以大端的形式,所以主机的字节序就需要相应的转换: host to net long uint32_t htonl(uint32_t hostlong); //本地字节序转换为网络字节序 uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netlong); //网络字节序转换为本地字节序 uint16_t ntohs(uint16_t netshort); IP地址字符面值与整数的相互转换: char *inet_ntoa(struct in_addr in); // n to a 整型数据转换成字符串 in_addr_t inet_addr(const char *cp); // 字符串面值的ip地址转换为in_addr_t,并且已经转换成了网络字节序 函数:void bzero(void *s, size_t n); 功能:The bzero() function sets the first n bytes of the area starting at s to zero (bytes containing '