socket
socket可以说是一种网络通信的函数接口,封装了传输层协议:TCP/UDP。
使用socket创建成功后,会得到文件描述符fd,fd操作的是一块内核缓冲区。
服务端编程
TCP的服务端编程可以总结为以下几个步骤:
1.创建通讯端socket,获取通讯描述符;
int socket(int domain,int type,int protocol);
2.将通讯描述符和服务器的ip地址和端口号绑定;
int bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen);
3.监听通讯描述符;
int listen(int sockfd,int backlog);
4.阻塞等待客户端请求的到来,获取连接描述符;
int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
5.获取客户端的数据:使用read操作;
6.数据处理;
7.将处理后的数据发送给客户端:使用write操作;
8.关闭和客户端的连接:使用close操作。
客户端编程
TCP的客户端编程可以总结为如下:
1.使用socket创建通讯描述符;
2.使用connect连接服务器;
int connect(int sockfd,const sockaddr *addr,socklen_t addrlen);
3.使用write向服务器发送数据;
4.等待服务器的响应;
5.关闭和服务器的连接。
补充
网络字节序为大端,在网络上传输可能要将小端转换为大端,再将大端转换为小端。
有以下函数:
unit32_t htonl(uint32_t hostlong);
unit16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
另外,可能会使用到INADDR_ANY,其含义是:让服务器端计算机上的所有网卡的ip地址都可以 作为服务器ip地址,也即监听外部客户端程序发送到服务器端所有网卡的网络请求。