当前位置: 首页 > news >正文

做网站的注意事项wordpress首页图片

做网站的注意事项,wordpress首页图片,wordpress html5插件,网页加速器app文章目录 一、TCP与UDP概述1.1 TCP的原理1.2 UDP的原理1.3 数据流动 二、Socket的使用2.1 TCP Socket示例2.2 UDP Socket示例 三、数据流动时序图3.1 TCP通信详解3.2 UDP通信详解 四、异常情况处理4.1 服务器ACK丢失4.2 第三次握手的ACK丢失 五、总结推荐阅读 Linux网络服务器编… 文章目录 一、TCP与UDP概述1.1 TCP的原理1.2 UDP的原理1.3 数据流动 二、Socket的使用2.1 TCP Socket示例2.2 UDP Socket示例 三、数据流动时序图3.1 TCP通信详解3.2 UDP通信详解 四、异常情况处理4.1 服务器ACK丢失4.2 第三次握手的ACK丢失 五、总结推荐阅读 Linux网络服务器编程中TCP和UDP是两种主要的传输层协议。本文将详细分析TCP和UDP在服务器编程中的使用、原理、代码示例、数据流动以及一些异常情况的处理方式。 一、TCP与UDP概述 1.1 TCP的原理 TCP是一种面向连接的协议它通过三次握手建立连接然后在连接上进行可靠的数据传输。TCP使用序列号和确认应答ACK来保证数据的可靠传输通过滑动窗口和拥塞控制算法进行流量控制和拥塞控制。 1.2 UDP的原理 相比于TCPUDP是一种更简单的协议。UDP是无连接的它直接在IP协议之上发送数据报不提供数据的可靠传输、流量控制或拥塞控制。因此UDP的延迟和开销较小适用于对实时性要求高的应用如语音和视频通信。 1.3 数据流动 在TCP和UDP通信中数据是从客户端流向服务器的。客户端首先建立连接TCP或直接发送数据报UDP然后服务器接收并处理这些数据可能会返回响应给客户端。在TCP通信中数据的流动是双向的客户端和服务器都可以发送数据和接收数据。在UDP通信中数据的流动也是双向的但是由于UDP是无连接的客户端和服务器可以独立地发送和接收数据。 二、Socket的使用 在Linux网络服务器编程中我们使用socket来实现TCP和UDP通信。以下是TCP和UDP的socket使用示例 2.1 TCP Socket示例 服务器端 #include sys/socket.h #include netinet/in.h #include unistd.h #include string.h #include iostreamint main() {int server_fd socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in server_addr;server_addr.sin_family AF_INET;server_addr.sin_port htons(8080);server_addr.sin_addr.s_addr INADDR_ANY;bind(server_fd, (struct sockaddr *)server_addr, sizeof(server_addr));listen(server_fd, 5);while (true) {struct sockaddr_in client_addr;socklen_t client_addr_len sizeof(client_addr);int client_fd accept(server_fd, (struct sockaddr *)client_addr, client_addr_len);char buffer[1024];ssize_t read_len read(client_fd, buffer, sizeof(buffer) - 1);buffer[read_len] \0;std::cout Received: buffer std::endl;write(client_fd, buffer, strlen(buffer));close(client_fd);}close(server_fd);return 0; }客户端 #include sys/socket.h #include netinet/in.h #include arpa/inet.h #include unistd.h #include string.h #include iostreamint main() {int client_fd socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in server_addr;server_addr.sin_family AF_INET;server_addr.sin_port htons(8080);inet_pton(AF_INET, 127.0.0.1, server_addr.sin_addr);connect(client_fd, (struct sockaddr *)server_addr, sizeof(server_addr));const char *message Hello, Server!;write(client_fd, message, strlen(message));char buffer[1024];ssize_t read_len read(client_fd, buffer, sizeof(buffer) - 1);buffer[read_len] \0;std::cout Received: buffer std::endl;close(client_fd);return 0; }在Linux网络编程中socket(), sockaddr_in 结构体和相关常量都是用于创建和配置套接字的关键组件。以下是上面代码的含义和用法 AF_INET这是一个地址族Address Family常量表示我们使用的是IPv4协议。在创建套接字时需要指定地址族以确定使用哪种协议。另一个常见的地址族是AF_INET6表示使用IPv6协议。 SOCK_STREAM这是一个套接字类型Socket Type常量表示我们使用的是面向连接的、可靠的字节流。在TCP协议中我们使用SOCK_STREAM类型的套接字。另一个常见的套接字类型是SOCK_DGRAM表示无连接的、不可靠的数据报文通常用于UDP协议。 socket(AF_INET, SOCK_STREAM, 0)这是一个系统调用用于创建一个新的套接字。它接受三个参数地址族如AF_INET、套接字类型如SOCK_STREAM和协议通常设置为0让系统自动选择协议如TCP或UDP。此函数返回一个套接字文件描述符用于后续的网络操作。 struct sockaddr_in这是一个用于表示IPv4套接字地址的结构体。它包含了地址族、端口号和IPv4地址。在网络编程中我们需要使用此结构体来设置服务器和客户端的地址信息。 server_addr.sin_family AF_INET设置sockaddr_in结构体中的地址族字段为AF_INET表示使用IPv4协议。 server_addr.sin_port htons(8080)设置sockaddr_in结构体中的端口号字段。htons()函数将主机字节序Host Byte Order转换为网络字节序Network Byte Order。这里我们设置端口号为8080。 INADDR_ANY这是一个特殊的IPv4地址0.0.0.0表示服务器将监听所有可用的网络接口。当服务器有多个网络接口时使用INADDR_ANY可以让服务器接受来自任何接口的连接请求。 server_addr.sin_addr.s_addr INADDR_ANY设置sockaddr_in结构体中的IPv4地址字段为INADDR_ANY表示服务器将监听所有可用的网络接口。 2.2 UDP Socket示例 服务器端 #include sys/socket.h #include netinet/in.h #include unistd.h #include string.h #include iostreamint main() {int server_fd socket(AF_INET, SOCK_DGRAM, 0);struct sockaddr_in server_addr;server_addr.sin_family AF_INET;server_addr.sin_port htons(8080);server_addr.sin_addr.s_addr INADDR_ANY;bind(server_fd, (struct sockaddr *)server_addr, sizeof(server_addr));while (true) {char buffer[1024];struct sockaddr_in client_addr;socklen_t client_addr_len sizeof(client_addr);ssize_t read_len recvfrom(server_fd, buffer, sizeof(buffer) - 1, 0, (struct sockaddr *)client_addr, client_addr_len);buffer[read_len] \0;std::cout Received: buffer std::endl;sendto(server_fd, buffer, strlen(buffer), 0, (struct sockaddr *)client_addr, client_addr_len);}close(server_fd);return 0; }客户端 #include sys/socket.h #include netinet/in.h #include arpa/inet.h #include unistd.h #include string.h #include iostreamint main() {int client_fd socket(AF_INET, SOCK_DGRAM, 0);struct sockaddr_in server_addr;server_addr.sin_family AF_INET;server_addr.sin_port htons(8080);inet_pton(AF_INET, 127.0.0.1, server_addr.sin_addr);const char *message Hello, Server!;sendto(client_fd, message, strlen(message), 0, (struct sockaddr *)server_addr, sizeof(server_addr));char buffer[1024];struct sockaddr_in recv_addr;socklen_t recv_addr_len sizeof(recv_addr);ssize_t read_len recvfrom(client_fd, buffer, sizeof(buffer) - 1, 0, (struct sockaddr *)recv_addr, recv_addr_len);buffer[read_len] \0;std::cout Received: buffer std::endl;close(client_fd);return 0; }三、数据流动时序图 以下是TCP和UDP通信的时序图展示了客户端与服务器之间的数据流动。 3.1 TCP通信详解 在TCP通信中我们首先需要建立一个TCP连接然后才能在这个连接上进行数据传输。以下是TCP通信的详细步骤和时序图 服务器执行socket()函数创建一个新的套接字。服务器执行bind()函数将套接字绑定到一个指定的地址包括IP地址和端口号。服务器执行listen()函数使套接字进入监听模式等待客户端的连接请求。服务器执行accept()函数阻塞并等待客户端的连接请求。当一个客户端连接请求到来时accept()函数返回并创建一个新的套接字与客户端进行通信。客户端执行socket()和connect()函数向服务器发起连接请求。connect()函数会发送一个SYN同步数据包到服务器。服务器收到SYN数据包在accept()函数返回后回复一个SYNACK确认应答数据包给客户端。客户端收到SYNACK数据包回复一个ACK数据包给服务器完成TCP连接的建立。TCP连接建立后客户端和服务器可以通过read()和write()函数进行数据传输。 以下是TCP通信的时序图 Server Client| || socket() || || bind() || || listen() || || accept() || ||--等待客户端连接请求---|| || || socket(), connect() | |--- SYN ------------|| ||-- SYN ACK -------|| ||--- ACK ------------|| ||-- Data ------------|| read(), write() || ||-- Data ----------- || read(), write() || |3.2 UDP通信详解 与TCP不同UDP是一种无连接的协议客户端和服务器不需要建立连接就可以直接发送数据。以下是UDP通信的详细步骤 服务器执行socket()函数创建一个新的套接字。服务器执行bind()函数将套接字绑定到一个指定的地址包括IP地址和端口号。客户端执行socket()函数创建一个新的套接字。客户端可以直接通过sendto()函数发送数据到服务器。服务器通过recvfrom()函数接收客户端发送的数据。 以下是UDP通信的时序图 Server Client| || socket() || || bind() || ||----等待客户端数据----|| || || socket()|| sendto()| |--- Data -----------|| recvfrom() || |在这种情况下服务器已经准备好接受客户端的数据。当客户端执行socket()和sendto()函数发送数据时服务器会通过recvfrom()函数接收这些数据。 四、异常情况处理 在网络通信中可能会遇到一些异常情况如TCP握手过程中服务器ACK丢失、第三次握手的ACK丢失等。以下是这些异常情况的处理方式 4.1 服务器ACK丢失 当服务器发送的ACK丢失时客户端将无法收到确认因此会重新发送SYN。服务器在收到重复的SYN后会再次发送ACK。这个过程会持续进行直到客户端收到ACK或达到最大重传次数。 4.2 第三次握手的ACK丢失 当第三次握手的ACK丢失时服务器可能仍在等待客户端的ACK。然而客户端已经认为连接建立可能会开始发送数据。服务器在收到客户端的数据后会认为连接已建立并更新连接状态。因此即使第三次握手的ACK丢失TCP连接仍然可以正常建立。 五、总结 本文详细讨论了Linux网络服务器编程中TCP和UDP两种方式的socket使用、原理分析、代码示例、数据流动时序图以及一些异常情况的处理方式。理解这些概念和技巧有助于更高效地进行网络服务器编程应对各种网络通信场景。 推荐阅读 TCP与UDP网络协议的技术原理与要点 从HTTP到QUIC网络协议的演进与优化 HTTPS原理、使用方法及安全威胁
http://www.pierceye.com/news/104415/

相关文章:

  • 一个主体如何添加网站室内设计公司的名字
  • 中国建设学会网站洛阳市住房和城乡建设局网站
  • 北京网站优化方式做物流的网站都有什么风险
  • 零基础学做网站页怎么部署wordpress
  • 网站如何做死链接提交筑站网络推广
  • 小说网站开发php网站后台如何修改文字
  • 网站制作是那个带有客户案例的网站
  • 中国纪检监察报数字报湛江关键词优化平台
  • 网站品牌词如何优化东莞公司网站建设营销型网站建设
  • 鞍山网站建设营销想把自己做的网站放到网上
  • 松原公司做网站青岛工程建设管理信息网官方网站
  • 一个空间2个网站网站 手机 app
  • 河北网站建设方案详细磁器口网站建设
  • 怎么做网站树洞wordpress edd 会员
  • 购物网站中加减数目的怎么做仿站违法吗
  • 代理ip访问网站局门户网站的建设
  • 建网站业务如何开展阳江房产信息网官网
  • 企业网站建设套餐费用网站开发完后期维护重要吗
  • 3营销型网站建设湖北短视频seo推荐
  • 鸿运通网站建设未成年怎么在网上卖东西
  • 郑州网站推广排名公司商会小程序开发一个多少钱啊
  • wordpress单页网站在本页跳转心理网站的建设与维护
  • 哪里可以做网站系统企业管理官网登录入口
  • iis7 网站404错误信息官网下载软件
  • 广州建设网站平台广东seo网站推广代运营
  • 网站 优化 关键字qq官网登录
  • 建设银行园区公积金管理中心网站地方门户网站推广
  • 桂林市网站设计wordpress远程数据库
  • 网站建设多钱怎么做网上卖菜网站
  • 响应式电商网站网站设计常见问题