- 服务器
①int socket(int domain, int type, int protocol);
功能:创建并打开套接字。
头文件:#include <sys/types.h>
#include <sys/socket.h>
参数1:地址族。(AF == PF)
PF_INET:internet协议。
PF_UNIT:unix internal协议。
PF_NS:Xerox NS协议。
PF_IMPLNK:Interface Message协议。
参数2:套接字类型。
SOCK_STREAM:流式套接字。(TCP)
SOCK_DGRAM:数据报套接字。(UDP)
SOCK_RAM:原始套接字。
参数3:参数通常置为0。
返回值:成功返回文件描述符。
失败返回-1。
②int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:将主机的IP地址和进程的端口号绑定到套接字上。
头文件:#include <sys/types.h>
#include <sys/socket.h>
参数1:调用创建好的套接字的文件描述符。
参数2:结构体,在结构体里指定IP地址和端口号的地址。
参数3:结构体的长度。
返回值:成功返回0。
失败返回-1。
参数2中的结构体:struct sockaddr
{
u_short sa_family;//地址族
char sa_data[14];//14字节协议地址
};
该结构体没有想要的成员,所以不用它,用别的结构体,要将别的结构体类型强制转换成该结构体类型。(struct sockaddr *)&别的结构体名
想要的结构体:struct sockaddr_in//共14字节
{
u_short sin_family;//地址族 2字节
u_short sin_port;//端口号 2字节
struct in_addr sin_addr;//IPv4地址,结构体 4字节
char sin_zero[8];//作为填充 8字节
};
端口号要把主机字节序转化成网络字节序:u_short htons(u_short short);
如果端口号使用main函数传参,要将char类型转化为int类型:atoi(端口号)。
将服务器IPv4地址设置成为(“0.0.0.0”)时,会自动转化为自己主机的IP地址,具有可移植性。
想要结构体中的结构体:struct in_addr
{
in_addr_t s_addr;//IP地址
};
要把十进制IP地址转换成二进制:in_addr_t inet_addr(const char *strptr);
③int listen(int sockfd, int backlog);
功能:创建监听套接字,用来连接客户端。
头文件:#include <sys/types.h>
#include <sys/socket.h>
参数1:监听套接字的文件描述符。
参数2:服务端在同一时间能处理的最大客户端连接请求数量。
返回值:成功返回0。
失败返回-1。
④int accept(int sockfd, const struct sockaddr *addr,socklen_t *addrlen);
功能:等待客户端请求并建立连接。
头文件:#include <sys/types.h>
#include <sys/socket.h>
参数1:监听套接字的文件描述符。
参数2:客户端的地址信息。如果不需要去获取地址信息,设置为NULL。
参数3:获取的地址长度。
返回值:成功返回新建的连接套接字描述符。
失败返回-1。
⑤ssize_t recv(int sockfd, void *buf, size_t len, int flags);
功能:接收客户端发来的数据。
头文件:#include <sys/types.h>
#include <sys/socket.h>
参数1:连接套接字的文件描述符。
参数2:申请到空间的首地址。
参数3:接收信息的字节长度。
参数4:接收方式(一般为0,阻塞方式,直到收到信息)。
返回值:成功返回接收到的字节数。
失败返回-1。
客户端退出返回0。
⑥int close(int fd);
功能:关闭套接字。
头文件:#include <unistd.h>
参数1:想要关闭套接字的文件描述符。
- 客户端
①int socket(int domain, int type, int protocol);
功能:创建并打开套接字。
头文件:#include <sys/types.h>
#include <sys/socket.h>
参数1:地址族。(AF == PF)
PF_INET:internet协议。
PF_UNIT:unix internal协议。
PF_NS:Xerox NS协议。
PF_IMPLNK:Interface Message协议。
参数2:套接字类型。
SOCK_STREAM:流式套接字。
SOCK_DGRAM:数据报套接字。
SOCK_RAM:原始套接字。
参数3:参数通常置为0。
返回值:成功返回文件描述符。
失败返回-1。
②int connect(int sockfd,struct sockaddr *serv_addr,int addrlen);
功能:按照服务器的端口号和IP地址连接服务器。
头文件:#include <sys/types.h>
#include <sys/socket.h>
参数1:调用创建好的套接字的文件描述符。
参数2:目标服务器的地址信息。(结构体:地址族,端口号,IPv4地址)
参数3:数据结构的长度。
返回值:成功返回0。
失败返回-1。
③ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能:向目标IPv4地址发送消息。
头文件:#include <sys/types.h>
#include <sys/socket.h>
参数1:调用创建好的套接字的文件描述符。
参数2:申请到空间的首地址。
参数3:发送信息的字节长度。
参数4:发送方式(一般为0,阻塞方式,直到发送信息)。
返回值:成功返回接收到的字节数。
失败返回-1。
④int close(int fd);
功能:关闭套接字。
头文件:#include <unistd.h>
参数1:想要关闭套接字的文件描述符。