珠海专业机械网站建设,wordpress视频网站模板下载,android软件开发前景,wordpress 移动端检查TCP#xff08;即传输控制协议#xff09;#xff1a;是一种面向连接的传输层协议#xff0c;它能提供高可靠性通信(即数 据无误、数据无丢失、数据无失序、数据无重复到达的通信) 适用情况#xff1a; 1. 适合于对传输质量要求较高#xff0c;以及传输大量数据 的通信。…TCP即传输控制协议是一种面向连接的传输层协议它能提供高可靠性通信(即数 据无误、数据无丢失、数据无失序、数据无重复到达的通信) 适用情况 1. 适合于对传输质量要求较高以及传输大量数据 的通信。 2. 在需要可靠数据传输的场合通常使用TCP协议 3. QQ等即时通讯软件的用户登录账户管理相关 的功能通常采用TCP协议
tcp协议特点: 1. 面向连接 //类似打电话通话之前 必须先打通 2. 可靠传输 //保证数据准确可靠 (tcp协议机制 里面的功能 ) 3. 面向字节流程
TCP服务器端首先产生一个socket用bind绑定socket再调用listen函数 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 2、bind函数解析
原型int bind(int sockfd,
struct sockaddr *my_addr, socklen_t addrlen);功能如果该函数在服务器端调用则表示将参数1相关 的文件描述符文件与参数2 指定的接口地址关联 用于从该接口接受数据。 如果该函数在客户端调用则表示要将数据从 参数1所在的描述符中取出并从参数2所在的接口 设备上发送出去。 注意 如果是客户端则该函数可以省略由默认接口发送数据。 参数 sockfd 之前通过socket函数创建的文件描述符套接字id my_addr 是物理接口的结构体指针。表示该接口的信息。 struct sockaddr 通用地址结构 --- ip 端口 { u_short sa_family; 地址族 char sa_data[14]; 地址信息 }; //本地 socket //网络 ipv4 // ipv6 转换成网络地址结构如下 struct sockaddr_in ///网络地址结构 { u_short sin_family; //地址族 u_short sin_port; //地址端口 struct in_addr sin_addr; //地址IP //192.168.1.123 char sin_zero[8]; //占位 }; //in_addr_t unsigned int struct in_addr { in_addr_t s_addr; }
3.listen函数解析
1listen函数的工作原理 通过函数创建的socket首先会用bind进行绑定然后通过listen转化为一种特殊的socket这种socket具体监听的作用当监听的socket遇到其他客户端发来的通信链接请求时会产生一个等待连接的队列随后accep函数将从队列中第一个等待连接请求开始产生一个用于通信的socket然后通过accept产生的socket完成客户端和服务器端的通信过程
过程图 1listen函数原型
#include sys/socket.h int listen(int sockfd, int backlog);
函数功能将套接字文件描述符从主动转为被动文件描述符然后用于被动监听客户端的连接 函数返回值成功返回0失败返回-1 errno被设置
参数 a. sockfd 表示socket创建的套接字文件描述符
b. backlog 指定队列的容量 这个队列用于记录正在连接但是还没有连接完成的客户端一般设置队列的容量为23即可。队列的最大容量需要小于30
2accept函数原型
#include sys/socket.h int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
函数功能 被动监听客户端发起的tcp连接请求三次握手后连接建立成功。客户端connect函数请求发起连接。 连接成功后服务器的tcp协议会记录客端的ip和端口如果是跨网通信记录ip的就是客户端所在路由器的公网ip 返回值 成功返回一个通信描述符专门用于与连接成功的客户端进行通信。 失败返回-1 并设置errno
函数参数 a. sockfd 已经被listen转为了被动描述符的“套接字文件描述符”专门用于客户端的监听入股sockfs没有被listen函数转为被动描述符则accept是无法将其用来监听客户端连接的。 套接字文件描述符默认是阻塞的即如果没有客户端请求连接的时候此时accept会阻塞直到有客户端连接如果不想套接字文件描述符阻塞则可以创建套接字 socket函数 时指定type为SOCK_NOBLOCK
b. addrlen表示第二个参数addr的大小不顾要求给定地址
c. addr: 用于记录发起连接请求的那个客户端的IP端口 建立连接时服务器的TCP协议会自动解析客户端发来的数据包从中获取客户端的IP和端口号 这里如果服务器应用层需要用到客户端的 IP和端口号可以给accept指定第二个参数addr,以获取TCP链接时的客户端ip和端口号如果服务器应用层不需要则写NULL即可 addr的结构体类型为 struct sockaddr