1 编程模型(重点掌握)
服务器:
(1)创建socket,使用socket函数
(2)准备通信地址,使用结构体类型
(3)绑定socket和通信地址,使用bind函数
(4)监听,使用listen函数
listen函数
#include <sys/types.h>
#include <sys/socket.h>
int listen(int sockfd, int backlog);
第一个参数:socket描述符,socket函数的返回值
第二个参数:允许排队等待被响应的最大连接数
函数功能:主要用于监听指定socket上的连接请求
(5)响应客户端的连接请求,使用accept函数
accept函数
#include <sys/types.h>
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
第一个参数:socket描述符,socket函数的返回值
第二个参数:结构体指针,用于存储客户端的通信地址
第三个参数:通信地址的大小,客户端的地址大小
返回值:成功返回一个socket描述符,失败返回-1
函数功能:主要用于响应指定socket上的连接请求
(6)进行通信,使用send/recv函数
send函数
#include <sys/types.h>
#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
第一个参数:socket描述符,accept函数的返回值
第二个参数:具体的缓冲区首地址(存放即将发送的数据内容)
第三个参数:即将发送的数据大小
第四个参数:发送的标志,默认给0即可
返回值:成功返回实际发送的数据大小,失败返回-1;
函数功能:
主要用于将指定的消息发送到指定的socket上;
recv函数
#include <sys/types.h>
#include <sys/socket.h>
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
第一个参数:socket描述符,accept函数的返回,主动的socket
第二个参数:缓冲区的首地址,用于存放接收到的消息
第三个参数:期望接收的数据大小
第四个参数:具体的接收方式,默认给0即可
返回值:成功返回实际接收的数据大小,失败返回-1;
当对方关闭时,该函数的返回值为0;
函数功能:
主要用于从指定的socket上接收指定的消息;
客户端:
(1)创建socket,使用socket函数
(2)准备通信地址,是服务器的地址
(3)连接socket和通信地址,使用connect函数
(4)进行通信,使用send/recv函数
(5)关闭socket,使用close函数
注意:
socket函数创建的socket主要用于监听连接数
accept函数创建的socket主要用于与客户端通信
inet_ntoa函数
char *inet_ntoa(struct in_addr in);
=> 主要用于将结构体类型的IP地址转换为字符串类型
in_addr_t inet_addr(const char *cp)
=> 主要用于将字符串类型的IP地址转化为整数类型