客户端服务流程设计
- 标识服务器的地址sockaddr_in
- 创建套接字socket
- 与服务器建立连接connect(f(socket,sockaddr_in))
- 发送报文(send)
- 接收报文(recv)
- 关闭连接close
服务器端服务流程设计
- 创建套接字socket
- 确定本地服务端口与ip地址sockaddr_in
- 将套接字bind到本地地址sockaddr_in
- 使套接字socket处于被动监听状态
- 连接到达时利用accept创建新的套接字描述符
- 利用新的套接字描述符进行报文的收发
- 关闭新的套接字连接
- 返回5
关于地址sockaddr_in
struct sockaddr_in{
u_char sin_len;//无需填写
u_short sin_family;//地址类型一般为AF_INET
u_short sin_port;//端口号--网络字节顺序
struct in_addr sin_addr;//32位ip地址--需转换为网络字节顺序
char sin_zero[8];
}
1.填写ip地址
主机地址-->网络字节顺序(2进制) sin_addr=inet_addr("135.254.21.36");
网络字节顺序(2进制)-->主机地址 inet_nota(sin_addr);
域名-->网络字节顺序 memcpy(&sin.sin_addr,phe->h_addr,phe->h_length);
2.填写端口号
//2字节转换
int-->网络字节顺序 sin_port=htons(8080);
网络字节顺序-->int ntohs(sin_port);
//4字节转换
htonl与ntohl可用于ip地址
3.其他
getserverbyname与getprotobyname