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 '