TCP/IP网络编程(2)

套接字的网络地址初始化与分配

网络地址的转化函数

1.inet_addr函数可以将点分十进制的IP地址转化为32位的整数型IP地址。

#include <arpa/inet.h>
//string:点分十进制IP地址
in_addr_t inet_addr(const char * string);

成功时返回32位大端序(网络字节序)整数型IP地址,失败返回INADDR_NONE。
2.inet_aton函数与inet_addr类似,不同在于inet_aton使用了in_addr结构体,其使用频率更高。

#include <arpa/inet.h>
//string:点分十进制IP地址
//addr:用来保存转换结果的in_addr结构的指针
int inet_aton(const char * string, struct in_addr * addr);

成功时返回1,失败返回0。
可以通过*(this).s_addr获取转换的结果。
3.inet_ntoa函数与inet_aton相反,其将32位整数型网络字节序的IP地址转化为点分十进制的IP地址。

#include <arpa/inet.h>
//addr:in_addr结构的变量
//addr:用来保存转换结果的in_addr结构的指针
char * inet_ntoa(struct in_addr addr);

成功返回转换后的IP地址的指针,失败返回-1。

server端网络地址初始化

利用字符串类型的值初始化sockaddr_in结构体变量实例:

memset函数将sockaddr_in结构的addr变量中所有字节初始化为0,这是为了将addr的成员sin_zero初始化为0。
atoi函数把字符串类型的值转化为整数型。

server端网络地址分配

#include <sys/socket.h>
//sockfd:套接字文件描述符
//myaddr:sockaddr结构变量的指针
//addrlen:第二个结构体变量的长度
int bind(int sockfd, struct sockaddr * myaddr, socklen_t addrlen);

成功返回0,失败返回-1。

server端进入等待连接请求阶段

listen函数:生成服务器端套接字。
server端只有调用listen函数,client端才能想server端发出连接请求,之后client端才能调用connect函数,否则会报错。

#include <sys/socket.h>
//sock:套接字文件描述符
//backlog:连接请求等待队列的长度,当为n,则表示队列长度为5,最多使5个请求进入队列
int listen(int sock, int backlog);	

成功返回0,失败返回-1。

server受理client端连接请求

accept函数:创建套接字,并连接到发起请求的client端。

#include <sys/socket.h>
//sock:server端套接字文件描述符
//addr:保存发起连接请求的client端的地址信息的指针,调用accpet函数后会向里面填充客户端地址信息
//addrlen:第二个参数addr的长度的指针,调用accpet函数后会填入客户端地址长度
int accept(int sock, struct sockaddr * addr, socklen_t * addrlen);	

成功时返回创建的套接字文件描述符,失败返回-1。

client端网络地址初始化

与server端初始化调用bind函数不同,client端初始化调用的是connect函数。

INADDR_ANY可为client端自动分配server端IP地址。

client端请求连接

创建client端套接字后向server端发起连接请求。

#include <sys/socket.h>
//sock:client端套接字文件描述符
//sockaddr:保存目标server端地址信息的指针
//addrlen:以字节为单位传递已传递给第二个结构体参数servaddr的地址变量长度
int connect(int sock, struct sockaddr * seraddr, socklen_t addrlen);

只有当:
1.server端接收连接请求
2.发生断网等异常情况而中断连接请求
函数才会返回。
成功返回0,失败返回-1。
需要注意,所谓的“接收连接”并不意味着服务器端调用accept函数,其实是server端把连接请求信息记录到等待队列。因此connect函数返回后并不立即进行数据交换。

server端和client端调用顺序关系

猜你喜欢

转载自blog.csdn.net/qwebaby2/article/details/105076017