一、基本目标
实现简单通信。读取配置文件以连接服务器并实现简单登录功能。
二、流程实现
三、详细设计
服务端
1、socket()
实现网络进程通信,在Linux/Unix“一切皆文件”的思想中实现“open、write/read、close”模式。可将其视作一种特殊的文件。
int sock_fd = socket(AF_INET, SOCK_STREAM, 0); //AF_INET:IPV4; SOCK_STREAM:TCP
2、bind()
当socket函数返回一个描述符时,只是存在于其协议族的空间中,并没有分配一个具体的协议地址(这里指IPv4/IPv6和端口号的组合),bind函数可以将一组固定的地址绑定到sockfd上。
struct sockaddr_in server_addr; //服务器地址
memset(&server_addr, 0, sizeof(struct sockaddr_in)); //初始化
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //INADDR_ANY:This machine all IP
bind(sock_fd, (struct sockaddr*)(&server_addr), sizeof(struct sockaddr));
3、listen()
当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用connect连接的客户套接字。listen函数把一个未连接的套接字转换成一个被动套接字,指示内核应该接受指向该套接字的连接请求。如下图所示,调用listen导致套接字从CLOSED状态转换到LISTEN状态。
————————————————
版权声明:本文为CSDN博主「godop」的原创文章,遵循CC 4.0 BY-SA版权协议。
原文链接:https://blog.csdn.net/godop/article/details/79894079
listen(sock_fd, BACKLOG);
4、connect()
通过此函数建立于TCP服务器的连接,实际是发起