socket通信函数
Socket套接字创建
Int socket(AF_INET, SOCK_STREAM, 0);
- 选择IP通信协议AF_INET->IPv4 AF_INET6->IPv6
- 选择通信协议TCP还是UDP SOCK_STREAM->TCP SOCK_DGRAM->UDP
设置结构体struct sockaddr_in (包含字节序更正)
一般来说网络字节序是大端存储、主机字节序是小端存储 需要转换
struct sockaddr_in server_addr;
bzero(&server_addr, sizeof(server_addr)); //清空内容
server_addr.sin_family = AF_INET; //选择协议族IPV4
server_addr.sin_addr.s_addr = htonl(xxx); //服务器的IP地址
server_addr.sin_port = htons(xxx); //绑定服务器端口号
Bind函数
绑定服务器端口号与IP地址
bind(sock, (struct sockaddr *)&server_addr, sizeof(server_addr));
- 服务器套接字
- 结构体地址
- 结构体大小
Listen函数
监听客户端请求
listen(sock, 128);
- 服务器套接字
- 等待客户端连接队列最大长度
Accept函数
Int accept(sock, (struct sockaddr *)&client, &client_addr_len);
- 服务器套接字
- 为客户端创建的结构体指针
- 结构体大小 socklen_t类型的指针
- 返回连接的客户端套接字
Read函数
读取客户端发送的信息
Int read(client_sock, buf, sizeof(buf)-1);
- 客户端套接字
- 接收缓冲区第一个字节的地址
- 缓冲区大小
- 接收到的字节大小
Write函数
发送数据到客户端
len = write(client_sock, buf, len);
- 客户端套接字
- 发送缓冲区第一个字节的地址
- 发送长度
- 发送成功的字节数
Close函数关闭连接
每次传输完后需要关闭套接字
一个套接字对应一个close
close(client_sock); //关闭客户端套接字
close(sock); //关闭服务器端套接字
inet_pton函数
IP地址大小端转换
inet_pton (AF_INET, SERVER_IP, &servaddr.sin_addr);
- 网络协议
- 原存储IP的地址
- 转换后存储地址
memset函数
清空结构体内容
memset(&servaddr, ‘\0’, sizeof(struct sockaddr_in));
Connect函数
与服务器进行连接,操作系统直接绑定客户IP地址与端口号
connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
- 客户端套接字
- 服务端结构体
- 结构体大小