德国站有哪些做站外秒杀的网站/steam交易链接怎么用

德国站有哪些做站外秒杀的网站,steam交易链接怎么用,开发国外优惠卷网站如何做,网站特效代码html00. 目录 文章目录 00. 目录01. TCP概述02. TCP应用场景03. TCP和UDP比较04. TCP相关API05. TCP编程流程06. 硬件设计07. 软件设计08. 实验现象09. 附录 01. TCP概述 TCP(Transmission Control Protocol)是一种面向连接、可靠的传输层协议,旨…

00. 目录

文章目录

    • 00. 目录
    • 01. TCP概述
    • 02. TCP应用场景
    • 03. TCP和UDP比较
    • 04. TCP相关API
    • 05. TCP编程流程
    • 06. 硬件设计
    • 07. 软件设计
    • 08. 实验现象
    • 09. 附录

01. TCP概述

TCP(Transmission Control Protocol)是一种面向连接可靠的传输层协议,旨在通过严格的传输控制机制,确保数据在IP网络中的有序、完整传输。与UDP不同,TCP通过流量控制、拥塞控制和重传机制为应用层提供高可靠性,适用于对数据准确性要求严苛的场景。

核心特点

面向连接
通信前需通过三次握手建立端到端连接,结束后通过四次挥手释放连接,确保通信双方状态同步。

可靠传输

  • 数据分片与重组:将大数据分割为报文段传输,接收端按序列号重组。
  • 确认应答(ACK):接收方需返回ACK确认收到数据,否则发送方重传。
  • 超时重传:未收到ACK时,自动重发丢失的报文段。

顺序控制
每个报文段携带唯一序列号(Sequence Number),接收端严格按序重组数据。

流量控制
通过滑动窗口机制动态调整发送速率,防止接收方缓冲区溢出。

拥塞控制
根据网络状况动态调整发送窗口,避免网络过载(如慢启动、拥塞避免算法)。

02. TCP应用场景

  1. Web通信
    HTTP/HTTPS(网页浏览)、SSL/TLS加密传输。
  2. 文件传输
    FTP(文件上传下载)、SFTP(安全文件传输)。
  3. 邮件服务
    SMTP(发送邮件)、POP3/IMAP(接收邮件)。
  4. 远程管理
    SSH(安全远程登录)、Telnet(远程终端)。
  5. 数据库操作
    MySQL、PostgreSQL等数据库协议依赖TCP保证事务完整性。

常见基于TCP的协议

  • HTTP/HTTPS(网页传输)
  • FTP/SFTP(文件传输)
  • SMTP/POP3/IMAP(电子邮件)
  • SSH(安全远程登录)
  • MySQL/Redis(数据库协议)

03. TCP和UDP比较

特性TCPUDP
连接方式面向连接(三次握手/四次挥手)无连接
可靠性可靠传输,自动重传不可靠,不重传
数据顺序严格保证顺序不保证顺序
流量控制滑动窗口机制
拥塞控制动态调整发送速率
头部大小最小20字节(可扩展)8字节
适用场景数据完整性 > 实时性实时性 > 可靠性

04. TCP相关API

以下 TCP 接口位于 vendor\hisi\hi3861\hi3861\third_party\lwip_sack\include\sockets.h

  • socket()

  • bind()

  • accept()

  • shutdown()

  • getpeername()

  • getsockopt()setsockopt()

  • close()

  • read()readv()write()writev()

  • recv()

  • send()sendmsg()sendto()

  • select()

  • fcntl()

05. TCP编程流程

在这里插入图片描述

5.1 新建socket

int sock_fd;//创建socket
if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{perror("create socket failed!\r\n");exit(1);
}

5.2 配置将要连接的服务器信息(端口和IP)

#define TCP_SERVER_ADRESS    "192.168.31.170"    // 要连接TCP服务器地址
#define TCP_PORT             8888                // 要连接TCP服务器端口号int addr_length;//服务器的地址信息
struct sockaddr_in send_addr;//初始化预连接的服务端地址
send_addr.sin_family = AF_INET;
send_addr.sin_port = htons(TCP_PORT);
send_addr.sin_addr.s_addr = inet_addr(TCP_SERVER_ADRESS);
addr_length = sizeof(send_addr);

5.3 连接服务器

connect(sock_fd, (struct sockaddr *)&send_addr, addr_length);

5.4 发送数据

static const char *send_data = "Hello! I'm BearPi-HM_Nano TCP Client!\r\n";while (1) 
{······//发送数据到服务远端int ret;if((ret = send(sock_fd, send_data, strlen(send_data), 0)) == -1){perror("send:");}······
}

5.5 接收数据

char recvBuf[512];int ret;
//接收服务端返回的字符串
if((ret = recv(sock_fd, recvBuf, sizeof(recvBuf), 0)) == -1)
{printf("recv error\r\n");
}
printf("recv:%s\r\n", recvBuf);

5.6 关闭连接

//关闭这个 socket
closesocket(sock_fd);

06. 硬件设计

由于 Hi3861 内置 WIFI 功能,所以直接在开发板上使用即可,无需额外连接

07. 软件设计

bsp_wifi.h

#ifndef __BSP_WIFI_H__
#define __BSP_WIFI_H__#include "cmsis_os2.h"
#include "hi_io.h"
#include "hi_gpio.h"
#include "wifi_error_code.h"
#include "wifi_device.h"//函数声明
WifiErrorCode WiFi_createHotSpots(const char *ssid, const char *psk);WifiErrorCode WiFi_connectHotspots(const char *ssid, const char *psk);#endif /* __BSP_WIFI_H__ */

bsp_wifi.c

#include <unistd.h>
#include <stdio.h>
#include <string.h>#include "wifi_device.h"
#include "wifi_hotspot.h"
#include "lwip/netifapi.h"
#include "lwip/netif.h"
#include "lwip/ip4_addr.h"
#include "lwip/api_shell.h"
#include "bsp_wifi.h"//WIFI通道
#define WIFI_CHANNEL    5#define DEF_TIMEOUT 15#define SELECT_WLAN_PORT "wlan0"//STA 连接状态结果
int g_ConnectState = 0;struct netif *g_lwip_netif = NULL;//----------------------------WIFI AP----------------------------------
/** Hotspot state change */
void OnHotspotStateChangedCallbak(int state)
{printf("OnHotspotStateChangedCallbak: state is %d.\n", state);if (WIFI_HOTSPOT_ACTIVE == state){printf("wifi hotspot active\n");}else{printf("wifi hotspot noactive\n");}
}/** Station connected */
void OnHotspotStaJoinCallbak(StationInfo *info)
{static char macAddr[32] = {0};static unsigned char *mac = NULL;if (NULL == info){printf("OnHotspotStaJoinCallbak is NULL\n");}else{mac = info->macAddress;snprintf(macAddr, sizeof(macAddr), "%02X:%02X:%02X:%02X:%02X:%02X",mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);printf("OnHotspotStaJoinCallbak: mac: %s reason: %d\n", macAddr, info->disconnectedReason);}
}/** Station disconnected */
void OnHotspotStaLeaveCallbak(StationInfo *info)
{static char macAddr[32] = {0};static unsigned char *mac = NULL;if (NULL == info){printf("OnHotspotStaLeaveCallbak is NULL\n");}else{mac = info->macAddress;snprintf(macAddr, sizeof(macAddr), "%02X:%02X:%02X:%02X:%02X:%02X",mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);printf("OnHotspotStaLeaveCallbak: mac: %s reason: %d\n", macAddr, info->disconnectedReason);}}//创建Wifi热点
WifiErrorCode WiFi_createHotSpots(const char *ssid, const char *psk)
{WifiErrorCode ret;static WifiEvent event;static HotspotConfig config;printf("Start Initialization of WiFI AP Mode\r\n");//注册WIFI事件的回调函数event.OnHotspotStaJoin = OnHotspotStaJoinCallbak;event.OnHotspotStaLeave = OnHotspotStaLeaveCallbak;event.OnHotspotStateChanged =OnHotspotStateChangedCallbak;ret = RegisterWifiEvent(&event);if (WIFI_SUCCESS != ret){printf("RegisterWifiEvent failed....\n");return -1;}printf("RegisterWifiEvent OK .....\n");//设置热点strcpy(config.ssid, ssid);strcpy(config.preSharedKey, psk);config.band = HOTSPOT_BAND_TYPE_2G;config.channelNum = WIFI_CHANNEL;config.securityType = WIFI_SEC_TYPE_PSK;ret = SetHotspotConfig(&config);if (WIFI_SUCCESS != ret){printf("SetHotspotConfig failed....\n");return -1;}printf("SetHotspotConfig OK....\n");//启动WIFI AP模式ret = EnableHotspot();if (WIFI_SUCCESS != ret){printf("EnableHotspot failed...\n");return -1;}printf("EnableHotspot OK ....\n");//检查热点模式是否使能if (WIFI_HOTSPOT_ACTIVE != IsHotspotActive()){printf("IsHotspotActive failed....\n");return -1;}printf("IsHotspotActive OK .....\n");
}//----------------------------WIFI STA----------------------------------/** Connection state change */
void staOnWifiConnectionChanged(int state, WifiLinkedInfo *info)
{if (state > 0){g_ConnectState = 1;printf("staOnWifiConnectionChanged state: %d\n", state);}else{printf("staOnWifiConnectionChanged failed state: %d\n", state);}}/** Scan state change */
void staOnWifiScanStateChanged(int state, int size)
{printf("staOnWifiScanStateChanged state: %d size: %d\n", state, size);
}/** Hotspot state change */
void staOnHotspotStateChanged(int state)
{printf("staOnHotspotStateChanged state: %d\n", state);
}/** Station connected */
void staOnHotspotStaJoin(StationInfo *info)
{printf("staOnHotspotStaJoin STA Join AP\n");
}/** Station disconnected */
void staOnHotspotStaLeave(StationInfo *info)
{printf("staOnHotspotStaLeave..\n");
}//STA模式 连接WIFI
WifiErrorCode WiFi_connectHotspots(const char *ssid, const char *psk)
{WifiErrorCode ret;static WifiEvent event;static WifiDeviceConfig config;int result;int timeout;printf("---------------WIFI STA Mode------------\n");//1. 注册WIFI事件event.OnHotspotStaJoin = staOnHotspotStaJoin;event.OnHotspotStaLeave = staOnHotspotStaLeave;event.OnHotspotStateChanged = staOnWifiScanStateChanged;event.OnWifiConnectionChanged = staOnWifiConnectionChanged;event.OnWifiScanStateChanged = staOnWifiScanStateChanged;ret = RegisterWifiEvent(&event);if (WIFI_SUCCESS != ret){printf("RegisterWifiEvent failed....\n");return -1;}else{printf("RegisterWifiEvent OK....\n");}//2. 使能WIFIret = EnableWifi();if (WIFI_SUCCESS != ret){printf("EnableWifi failed...\n");return -1;}//3. 判断WIFI是否激活if (WIFI_STA_ACTIVE != IsWifiActive()){printf("IsWifiActive is not actived..\n");return -1;}//4. 配置连接热点信息strcpy(config.ssid, ssid);strcpy(config.preSharedKey, psk);config.securityType = WIFI_SEC_TYPE_PSK;ret = AddDeviceConfig(&config, &result);if (WIFI_SUCCESS != ret){printf("AddDeviceConfig failed....\n");return -1;}//5. 连接到热点if (WIFI_SUCCESS == ConnectTo(result)){printf("ConnectTo OK.....\n");}else{printf("ConnectTo failed....\n");return -1;}//6. 等待连接结果timeout = DEF_TIMEOUT;while(timeout > 0){sleep(1);timeout--;if (1 == g_ConnectState){printf("Connect to %s OK ....\n", ssid);break;}}if (timeout <= 0){printf("Connect to %s timeout.....\n", ssid);return -1;}//7. 获取网络接口g_lwip_netif = netifapi_netif_find(SELECT_WLAN_PORT);//8. 启动DHCPif (NULL != g_lwip_netif){dhcp_start(g_lwip_netif);printf("dhcp_start begin dhcp....\n");}//9. 等待DHCPfor (;;){if (dhcp_is_bound(g_lwip_netif) == ERR_OK){//打印获取到的IP信息netifapi_netif_common(g_lwip_netif, dhcp_clients_info_show, NULL);break;}printf("DHCP IP InProgress.....\n");sleep(1);}//10. 执行其它操作}

template.c


#include <stdio.h>
#include <unistd.h>#include "ohos_init.h"
#include "cmsis_os2.h"#include "bsp_wifi.h"
#include "lwip/sockets.h"#define TASK_STACK_SIZE 1024static const char *data = "hello shenzhen";//任务1ID
osThreadId_t task1_id;
osThreadId_t task2_id;//线程回调入口函数
void task1 (void *argument)
{int sockfd = -1;int ret = -1;char buf[128];struct sockaddr_in addr;//连接到WIFIWiFi_connectHotspots("IOT", "iot12345678");//创建套接字sockfd = socket(AF_INET, SOCK_STREAM, 0);if (-1 == sockfd){perror("socket");return;}printf("sockfd = %d\n", sockfd);//初始化预连接的服务端地址memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(10086);addr.sin_addr.s_addr = inet_addr("192.168.16.51");//连接到服务端ret = connect(sockfd, &addr, sizeof(addr));if (-1 == ret){perror("connect");return;}printf("connect to server OK....\n");//数据发送和接收while(1){ret = send(sockfd, data, strlen(data), 0);if (-1 == ret){perror("send");break;}printf("send: %s ret: %d\n", data, ret);memset(buf, 0, sizeof(buf));ret = recv(sockfd, buf, sizeof(buf), 0);if (-1 == ret){perror("recv");break;}printf("recv: %s ret: %d\n", buf, ret);sleep(1);}//关闭连接closesocket(sockfd);}/*** @description: 初始化并创建任务* @param {*}* @return {*}*/
static void template_demo(void)
{  osThreadAttr_t attr;attr.name = "task1"; //任务名称attr.attr_bits = osThreadDetached; //分离状态attr.cb_mem = NULL;attr.cb_size = 0;attr.stack_mem = NULL;attr.stack_size = TASK_STACK_SIZE * 10;attr.priority = osPriorityNormal;//创建任务1task1_id = osThreadNew(task1, NULL, &attr);if (NULL != task1_id){printf("任务1创建OK task1_id = %d\n", task1_id);}}
SYS_RUN(template_demo);

08. 实验现象

在这里插入图片描述

09. 附录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025-03-25 学习记录--C/C++-PTA 习题9-3 平面向量加法

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 习题9-3 平面向量加法 本题要求编写程序&#xff0c;计算两个二维平面向量的和向量。 输入格式: ❀ 输入在…

23种设计模式-桥接(Bridge)设计模式

桥接设计模式 &#x1f6a9;什么是桥接设计模式&#xff1f;&#x1f6a9;桥接设计模式的特点&#x1f6a9;桥接设计模式的结构&#x1f6a9;桥接设计模式的优缺点&#x1f6a9;桥接设计模式的Java实现&#x1f6a9;代码总结&#x1f6a9;总结 &#x1f6a9;什么是桥接设计模式…

go:前后端分离

1.前端代码 新建一个前端文件夹&#xff0c;在该文件夹下新建一个.html文件&#xff0c;写入自己的html代码。 前端搞定。 2.后端代码 其核心是挂载路由接受前端传来的数据核心代码如下&#xff1a; func main() { // 服务运行提示 fmt.Println("go web server is runn…

JetsonNano —— 4、Windows下对JetsonNano板卡烧录刷机Ubuntu20.04版本(官方教程)

介绍 NVIDIA Jetson Nano™ 开发者套件是一款面向创客、学习者和开发人员的小型 AI 计算机。按照这个简短的指南&#xff0c;你就可以开始构建实用的 AI 应用程序、酷炫的 AI 机器人等了。 烧录刷机 1、下载 Jetson Nano开发者套件SD卡映像 解压出.img文件并记下它在计算机上的…

文件I/O--C++的文件操作

一、打开文件&#xff0c;从文件中读取、写入文件 从文件中读取数据&#xff1a; #include<fstream> //fstream File stream:文件流 #include<iostream> //fstream包含了 iostream&#xff0c;所以这句可以省略&#xff0c;现在不能了 using namespace std;i…

C语言贪吃蛇实现

When the night gets dark,remember that the Sun is also a star. 当夜幕降临时&#xff0c;请记住太阳也是一颗星星。 ————《去月球海滩篇》 目录 文章目录 一、《贪吃蛇》游戏介绍 二、WIN32部分接口简单介绍 2.1 控制台窗口大小设置 2.2 命令行窗口的名称的变更 2…

基于vue.js开发的家庭装修管理系统开发与设计(源码+lw+部署文档+讲解),源码可白嫖!

摘要 本家庭装修管理系统采用B/S架构&#xff0c;数据库是MySQL&#xff0c;网站的搭建与开发采用了先进的Node.js语言进行编写&#xff0c;使用了VUE框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。用户的功能包括&#xff1a;注册、登录、浏览首页…

OpenCV图像拼接(5)图像拼接模块的用于创建权重图函数createWeightMap()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::detail::createWeightMap 是 OpenCV 库中用于图像拼接模块的一个函数&#xff0c;主要用于创建权重图。这个权重图在图像拼接过程中扮演着重…

LangGraph 怎么控制递归次数

这一节我们讲讲langgraph图的递归限制 Recursion Limit&#xff0c;递归限制设置了图在单次执行过程中可以执行的最大超级步骤数。一旦达到该限制&#xff0c;LangGraph 将引发 GraphRecursionError 错误。默认情况下&#xff0c;此值设置为 25 步。递归限制可以在运行时为任何…

Milvus WeightedRanker 对比 RRF 重排机制

省流:优先选择WeightedRanker 以rag为例,优先选择bm25全文检索,其次选择向量检索 Milvus混合搜索中的重排机制 Milvus通过hybrid_search() API启用混合搜索功能&#xff0c;结合复杂的重排策略来优化多个AnnSearchRequest实例的搜索结果。本主题涵盖了重排过程&#xff0c;…

在K8S中使用ArgoCD做持续部署

一、了解argocd ArgoCD是一个基于Kubernetes的GitOps持续交付工具&#xff0c;应用的部署和更新都可以在Git仓库上同步实现&#xff0c;并自带一个可视化界面。本文介绍如何使用GitArgocd方式来实现在k8s中部署和更新应用服务。关于ci这一块这里不多介绍。主要讲解argocd如何实…

可视化图解算法:删除有序(排序)链表中重复的元素

1. 题目 描述 删除给出链表中的重复元素&#xff08;链表中元素从小到大有序&#xff09;&#xff0c;使链表中的所有元素都只出现一次 例如&#xff1a; 给出的链表为1→1→2,返回1→2. 给出的链表为1→1→2→3→3返回1→2→3. 数据范围&#xff1a;链表长度满足 0≤n≤100…

ETL:数据清洗、规范化和聚合的重要性

在当今这个数据呈爆炸式增长的时代&#xff0c;数据已成为企业最为宝贵的资产之一。然而&#xff0c;数据的海量增长也伴随着诸多问题&#xff0c;如数据来源多样、结构复杂以及质量问题等&#xff0c;这些问题严重阻碍了数据的有效处理与深度分析。在此背景下&#xff0c;ETL&…

spring boot jwt生成token

1、引入jwt依赖 <!--jwt的依赖--> <dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.18.3</version> </dependency> 2、创建TokenUtils工具类 package com.pn.utils;import com.…

豪越科技:融合低空经济的消防一体化安全管控解决方案

在科技飞速发展的当下&#xff0c;2025 年低空经济正处于规模化商用的关键节点&#xff0c;其在应急救援、物流配送等多领域展现出巨大潜力。豪越科技凭借其先进的消防一体化安全管控方案&#xff0c;与低空经济深度融合&#xff0c;打造出一套更为高效、智能的消防解决方案&am…

清华大学 | DeepSeek第十版!《DeepSeek政务应用场景及解决方案》

清华大学发布的《DeepSeek政务应用场景及解决方案》研究报告&#xff0c;聚焦人工智能技术DeepSeek在政府治理与公共服务中的创新实践&#xff0c;系统阐述了其如何通过智能化技术赋能政务数字化转型&#xff0c;推动治理能力现代化。报告指出&#xff0c;DeepSeek作为融合大数…

R语言双Y轴折线图+相关性注释

目录 包和数据 作图代码及详解 包和数据 rm(list ls()) library(ggpubr) library(scales) library(ggplot2)data <- iris##鸢尾花数据集 data1 <- data[1:30,c(1,2,3)] > head(data1)Sepal.Length Sepal.Width Petal.Length 1 5.1 3.5 …

2024年3月全国计算机等级考试真题(二级C语言)

&#x1f600; 第1题 下列叙述中正确的是 A. 矩阵是非线性结构 B. 数组是长度固定的线性表 C. 对线性表只能作插入与删除运算 D. 线性表中各元素的数据类型可以不同 题目解析&#xff1a; A. 矩阵是非线性结构 错误。矩阵通常是二维数组&#xff0c;属…

基于Ebay拍卖网站成交价格的影响因素分析

摘要:近些年来网上拍卖的不断地发展&#xff0c;网上购物慢慢变成了大家普遍接受的购物方式。因此关于网上拍卖的研究日益成为很多人研究的重点。 影响拍卖网站价格的因素很多&#xff0c;但很少有人分得清楚哪些因素才是比较重要的因素&#xff0c;因此对价格因素分析&#x…

Langchain中的表格解析:RAG 和表格的爱恨情仇

实现 RAG(Retrieval-Augmented Generation)是一个挑战,尤其是在有效解析和理解非结构化文档中的表格时。这在处理扫描文档或图像格式的文档时尤为困难。这些挑战至少包括以下三个方面: 1.表格的“叛逆期”:不准确的解析可能会破坏表格结构: 表格在文档里就像个叛逆的青少…