wap网站的好处,如何盗用网站模板,30秒短视频制作报价明细,怎么做有趣的微视频网站TCP的p2p网络模式
1、tcp连接的状态有以下11种
CLOSED#xff1a;关闭状态LISTEN#xff1a;服务端状态#xff0c;等待客户端发起连接请求SYN_SENT#xff1a;客户端已发送同步连接请求#xff0c;等待服务端相应SYN_RECEIVED#xff1a;服务器收到客户端的SYN请请求关闭状态LISTEN服务端状态等待客户端发起连接请求SYN_SENT客户端已发送同步连接请求等待服务端相应SYN_RECEIVED服务器收到客户端的SYN请请求并发送自己的SYN响应并等待客户端对这个SYNACK的确认等待客户端连接确认ESTABLISHED双方完成三次握手连接成功可以进行数据传输FIN_WAIT_1主动关闭连接的一方通常是客户端已经发送FIN报文但是还未收到对方的确认。此时仍可以进行数据接收FIN_WAIT_2主动关闭一方收到了对方的FIN确认但是没收到对方的FIN进入半连接状态仅能接收数据CLOSE_WAIT被动关闭连接的一方已经收到FIN并发送了确认但尚关闭连接等待应用层释放资源CLOSING双方都发送了关闭请求都在等待对方确认LAST_ACK被动关闭的一方发送了FIN等待最后的ACK来关闭连接TIME_WAIT主动关闭方发送完FIN并收到对方的FINACK后进入该状态等待足够长的时间确保对方能够收到确认后再关闭连接所有连接终止程序完成后套接字回到CLOSED状态
tcp所有的状态转换图如下 2、正常的TCP连接和断开状态转换
客户端状态转换过程
CLOSED-SYN_SENT-ESTABLISHED-FIN_WAIT_1-FIN_WAIT_2-TIME_WAIT-CLOSED
服务端状态转换过程 CLOSED-LISTEN-SYN_RCVD-ESTABLISHED-CLOSE_WAIT-LAST_ACK-CLOSED 3、其他状态转换过程
同时发送断开连接
ESTABLISHED-FIN_WAIT_1-CLOSING-TIME_WAIT-CLOSED 同时去发送连接pop网络模式
CLOSED-SYN_SENT-SYN_RCVD-ESTABLISHED Peer-to-Peer中文译为“对等网络”或“点对点技术”是一种分布式应用架构其中每个参与者称为“节点”都能够同时作为客户端和服务器直接与其它节点进行数据交互而不需要通过中央服务器中转。P2P网络的关键特征是去中心化和资源的分散共享这使得网络更加健壮更能适应大规模的数据交换和共享
pop网络模式的代码实现
#include sys/socket.h
#include errno.h
#include netinet/in.h
#include stdlib.h
#include unistd.h
#include stdio.h
#include string.h
#include unistd.h
#include pthread.h
#include sys/poll.h
#include arpa/inet.hint bind_localaddr(const char *ip, short port) {int connfd socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in tcpclient_addr;memset(tcpclient_addr, 0, sizeof(struct sockaddr_in));tcpclient_addr.sin_family AF_INET;tcpclient_addr.sin_addr.s_addr htonl(INADDR_ANY);tcpclient_addr.sin_port htons(port);if (-1 bind(connfd, (struct sockaddr*)tcpclient_addr, sizeof(struct sockaddr))) {perror(bind);return -1;}return connfd;
}int connect_tcpserver(int connfd, const char *ip, short port) {struct sockaddr_in tcpserver_addr;memset(tcpserver_addr, 0, sizeof(struct sockaddr_in));tcpserver_addr.sin_family AF_INET;tcpserver_addr.sin_addr.s_addr inet_addr(ip);tcpserver_addr.sin_port htons(port);int ret connect(connfd, (struct sockaddr*)tcpserver_addr, sizeof(struct sockaddr_in));if (ret) {return -1;}return connfd;
}void *client_thread(void *arg) { int clientfd *(int *)arg;while (1) { printf( client );char buffer[128] {0};scanf(%s, buffer);if (strcmp(buffer, quit) 0) {break;}int len strlen(buffer);printf(count: %d, send: %s\n, len, buffer);send(clientfd, buffer, len, 0);}
}int main(int argc, char *argv[]) {if (argc 3) {printf(arg\n);return -1;}char *ip argv[1];int port atoi(argv[2]);int sockfd bind_localaddr(0.0.0.0, 8000);while (1) {int ret connect_tcpserver(sockfd, ip, port);if (ret 0) {usleep(1);continue;}break;}printf(connect success\n);pthread_t thid; pthread_create(thid, NULL, client_thread, sockfd);struct pollfd fds[1] {0};fds[0].fd sockfd; fds[0].events POLLIN;while (1) {int nready poll(fds, 1, -1);if (fds[0].revents POLLIN) {char buffer[128] {0}; int count recv(sockfd, buffer, 128, 0);if (count 0) {fds[0].fd -1; fds[0].events 0;close(sockfd);break;}printf(recv -- count: %d, buffer: %s\n, count, buffer);}}
}