服务器
有两个文件描述符。一个lfd用于监听,一个cfd用于通信。
socket()返回用于监听的文件描述符lfd,bind()绑定该文件描述符以及服务器的IP和端口(用sockaddr结构体储存),listen()使服务器进入LISTEN状态并指定最大监听数,accept()函数指定一个sockaddr结构体存储客户端的IP和端口,如果没有客户端的连接请求则阻塞,有则返回通信的文件描述符cfd。read(recv)函数用来读取缓冲区中的数据,write(send)函数用来写缓冲区中的数据。如果read返回0说明客户端断开连接。
客户端
只有一个文件描述符fd,用于通信。
socket()返回fd,connect()请求连接服务器,传入一个sockaddr结构体存储要访问的服务器IP和端口,成功连接服务器后,客户端会随机绑定一个端口。后续和服务器一致。