8.TCP Server端實現

1.C/S模型

2.Server 端功能分析

tcp_server.c

#include "tcp_server.h"
#include "lwip/sockets.h"
#include <stdio.h>char ReadBuff[BUFF_SIZE];
/*
TCP服務器任務函數
*/
void vTcpserver_Task(void)
{int 	 sfd, cfd, n, i;struct sockaddr_in server_addr, client_addr;socklen_t	client_addr_len;//創建socketsfd = socket(AF_INET, SOCK_STREAM, 0);server_addr.sin_family 			= AF_INET;server_addr.sin_port   			= htons(SERVER_PORT);server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//綁定socketbind(sfd, (struct sockaddr *)&server_addr, sizeof(server_addr));//監聽socketlisten(sfd, 5);//等待客戶端連接client_addr_len = sizeof(client_addr);cfd = accept(sfd, (struct sockaddr *)&client_addr, &client_addr_len);printf("client is connect cfd = %d\r\n",cfd);while(1){//等待客戶端發送數據n = read(cfd, ReadBuff, BUFF_SIZE);//進行大小寫轉換for(i = 0; i < n; i++){ReadBuff[i] = toupper(ReadBuff[i]);	//大小寫轉換	}//寫回客戶端write(cfd, ReadBuff, n);}
}

tcp_server.h

#ifndef _TCP_SERVER_H_
#define _TCP_SERVER_H_#define SERVER_IP				"192.168.1.12"
#define SERVER_PORT			6666
#define BUFF_SIZE				1024#include "main.h"void vTcpserver_Task(void);#endif

freertos.c

#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include "tcp_server.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN Variables *//* USER CODE END Variables */
/* Definitions for defaultTask */
osThreadId_t defaultTaskHandle;
const osThreadAttr_t defaultTask_attributes = {.name = "defaultTask",.stack_size = 128 * 4,.priority = (osPriority_t) osPriorityNormal,
};
/* Definitions for Start_Task */
osThreadId_t Start_TaskHandle;
const osThreadAttr_t Start_Task_attributes = {.name = "Start_Task",.stack_size = 1024 * 4,.priority = (osPriority_t) osPriorityBelowNormal,
};/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes *//* USER CODE END FunctionPrototypes */void StartDefaultTask(void *argument);
void StartTask(void *argument);extern void MX_LWIP_Init(void);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) *//*** @brief  FreeRTOS initialization* @param  None* @retval None*/
void MX_FREERTOS_Init(void) {/* USER CODE BEGIN Init *//* USER CODE END Init *//* USER CODE BEGIN RTOS_MUTEX *//* add mutexes, ... *//* USER CODE END RTOS_MUTEX *//* USER CODE BEGIN RTOS_SEMAPHORES *//* add semaphores, ... *//* USER CODE END RTOS_SEMAPHORES *//* USER CODE BEGIN RTOS_TIMERS *//* start timers, add new ones, ... *//* USER CODE END RTOS_TIMERS *//* USER CODE BEGIN RTOS_QUEUES *//* add queues, ... *//* USER CODE END RTOS_QUEUES *//* Create the thread(s) *//* creation of defaultTask */defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);/* creation of Start_Task */Start_TaskHandle = osThreadNew(StartTask, NULL, &Start_Task_attributes);/* USER CODE BEGIN RTOS_THREADS *//* add threads, ... *//* USER CODE END RTOS_THREADS *//* USER CODE BEGIN RTOS_EVENTS *//* add events, ... *//* USER CODE END RTOS_EVENTS */}/* USER CODE BEGIN Header_StartDefaultTask */
/*** @brief  Function implementing the defaultTask thread.* @param  argument: Not used* @retval None*/
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{/* init code for LWIP *//* USER CODE BEGIN StartDefaultTask *//* Infinite loop */for(;;){osDelay(1);}/* USER CODE END StartDefaultTask */
}/* USER CODE BEGIN Header_StartTask */
/**
* @brief Function implementing the Start_Task thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask */
void StartTask(void *argument)
{/* USER CODE BEGIN StartTask */MX_LWIP_Init();printf("Start LWIP!\r\n");/* Infinite loop */for(;;){vTcpserver_Task();osDelay(1);}/* USER CODE END StartTask */

串口打印端

TCP Client

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909583.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909583.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909583.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

課設作業圖書管理系統

用戶注冊&#xff0c;登錄 播放地址 課設作業圖書管理系統_嗶哩嗶哩_bilibili 對圖書進行增刪改查 package com.xwr.controller; import com.xwr.entity.Book; import com.xwr.entity.Category; import com.xwr.service.BookService; import com.xwr.service.CategoryServ…

springboot 配置加密

springboot 配置加密 [TOC](springboot 配置加密) 前言一、在配置類賦值之前解密二、修改賦值后加密的配置類 前言 在一些國家項目中經常會要求不能暴露數據庫鏈接和密碼, 所以需要對配置文件里面的一些配置進行加密處理。 解決方法有兩種&#xff1a;一種是在配置加載后還沒給…

【操作系統】macOS軟件提示“已損壞,打不開”的解決方案

macOS軟件提示“已損壞&#xff0c;打不開”的解決方案 在使用 macOS 系統時&#xff0c;不少用戶都遇到過這樣的情況&#xff1a;當嘗試打開某個應用程序時&#xff0c;系統彈出提示“xxx 已損壞&#xff0c;打不開。您應該將它移到廢紙簍”&#xff0c;或者顯示“無法打開‘…

數據庫系統概論(二十)數據庫恢復技術

數據庫系統概論&#xff08;二十&#xff09;數據庫恢復技術 前言一、事務的基本概念1. 什么是事務&#xff1f;2. 事務的兩種"打開方式"2.1 隱式事務2.2 顯式事務&#xff1a;自己動手打包操作 3. 事務的四大"鐵律3.1 原子性3.2 一致性3.3 隔離性3.4 持久性 4.…

java將pdf文件轉換為圖片工具類

一、相關依賴 <!-- PDFBox for PDF processing --><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.27</version></dependency>二、工具類 import org.apache.pdfbox.p…

零門檻探索國產數據庫硬核實力 —— 金倉數據庫在線體驗平臺體驗記

1、 金倉數據庫在線體驗平臺 最近&#xff0c;我發現了一個超棒的數據庫寶藏 —— 金倉數據庫在線體驗平臺。它在金倉社區上線后&#xff0c;憑借 “零門檻體驗 多場景交互” 的特點&#xff0c;迅速吸引了眾多數據庫愛好者的目光&#xff0c;我也忍不住去體驗了一番。 2、 …

Linux基本操作指令和vim編譯器

基本指令 查看日期與日歷 data 指令 顯示日期 用法1&#xff1a;data CST&#xff1a;China Standard Time 時區&#xff0c;中國標準時間 用法2&#xff1a; data 指定格式 常用格式&#xff1a; “%Y-%m-%d”(%F): 2025-06-16“%H:%M:%S”(%T): 20:19:45“%F%T”用法3&am…

“從HTTP到TCP/IP的旅程“-----深入淺出Java Web通信

先放結構圖&#xff1a; 一、引言&#xff1a;網絡通信就像寄快遞 想象一下我們在網上買了一本書&#xff0c;整個配送過程是這樣的&#xff1a; 應用層&#xff1a;你在購物網站填好收貨地址&#xff08;HTTP請求&#xff09;傳輸層&#xff1a;快遞公司把包裹打包&#xf…

docker build使用代理以實現構建過程中下載Github源碼等操作

在通過Dockerfile構建docker容器的過程中&#xff0c;經常會需要在構建過程中拉取Github上的代碼。當宿主機配好代理&#xff0c;但容器內是一個隔離的環境&#xff0c;若想在容器內訪問&#xff0c;則需再打通容器和宿主機之間的代理配置。 方法一&#xff1a; 若宿主機上的…

Docker 快速搭建一個基于 GPT-Vis 組件的統計圖表生成服務

以下是對工具簡單介紹&#xff1a; 可以在服務端使用 GPT-Vis 統計圖表組件直接渲染成圖片支持Docker一鍵部署&#xff0c;提供統計圖表渲染生成API接口支持多種GPT-Vis支持的組件&#xff0c;包括折線圖、柱形圖、餅圖、面積圖、條形圖、直方圖、散點圖、詞云圖、雷達圖、思維…

hal庫練習1

要求&#xff1a;一個按鍵實現呼吸燈的控制&#xff0c;一個按鍵控制LED燈的閃爍&#xff0c;串口發送數據控制燈的開關 定時器配置 1.選擇需要的定時器2.配置基礎參數&#xff08;根據時鐘樹給定時器輸入的時鐘&#xff09;3.打開中斷4.在主函數里打開中斷 定時器掃描按鍵 …

java線程(4)

程序(program) 是為完成制定任務,用某種語言編寫的一組指令的集合.簡單的話說:就是我們寫的代碼. 進程 1.進程是指進行中的程序,比如我們使用QQ,就啟動了一個進程,操作系統就會為該進程分配內存空間,當我們使用迅雷,又啟動了一個進程,操作系統將為迅雷分配新的內存空間. 2、…

02《F8Framework》核心入口 FF8.cs

FF8.cs類是 F8Framework的核心入口 采用單例模式 提供對各個功能模塊的全局訪問 【特點】通過靜態類FF8統一訪問所有功能 1.模塊化設計&#xff1a; 每個功能獨立 通過 ModuleCenter 統一管理 2.懶加載機制&#xff1a; …

【硬件】相機的硬件測試

相機測試 author: Alla Imatest 提供超過 30 種測試項目&#xff0c;主要包括&#xff1a; 1&#xff09;圖像基礎參數?&#xff1a;MTF&#xff08;調制傳遞函數&#xff09;、畸變、均勻性、動態范圍 2&#xff09;色彩與光學特性?&#xff1a;白平衡誤差、飽和度、gamma …

Profinet與Modbus TCP協議轉換技術:西門子S7-1500(主站)和歐姆龍NJ PLC的高效數據交換

一、項目背景 某大型現代化智慧農業養殖場致力于打造全方位智能化的養殖環境。其養殖系統中&#xff0c;環境監測與調控部分選用了西門子S7-1500PLC作為Profinet協議主站。該PLC憑借強大的運算能力和豐富的功能模塊&#xff0c;能夠精準地采集和處理養殖場內的溫度、濕度、空氣…

希爾伯特變換,實信號轉復信號的FPGA實現思路

希爾伯特變換將實信號轉復信號的原理 將實信號的相位推遲90度后作為復信號的虛部。 錯誤實現方式 實信號經過希爾伯特濾波后得到復信號的虛部&#xff0c;之后直接與實信號組成復信號。而由于濾波器本身會對信號延時&#xff0c;故I路與Q路并不是相差90度&#xff0c;所以此方…

多模態大語言模型演進:從視覺理解到具身智能的技術突破

多模態大語言模型演進:從視覺理解到具身智能的技術突破 多模態大語言模型(MLLMs)正在重塑人工智能的邊界,實現從"看見"到"理解"再到"行動"的全鏈條智能。本文將深入解析蘋果最新多模態研究進展,揭示視覺-語言模型十年演進的技術脈絡,剖析…

window顯示驅動開發—渲染管道

支持 Direct3D 版本 10 的圖形硬件可以使用共享可編程著色器核心進行設計。 GPU) (圖形處理單元可以編程著色器核心&#xff0c;這些著色器核心可以跨構成呈現管道的功能塊進行計劃。 這種負載均衡意味著硬件開發人員不需要使用每種著色器類型&#xff0c;而只需要使用執行呈現…

時序數據庫Apache IoTDB核心技術深度解析

一、引言 ?背景?&#xff1a;5G技術加速了IoT領域的發展&#xff0c;物聯網設備數據的收集、存儲和計算需求日益增長。Apache IoTDB作為一款專為物聯網時序數據設計的軟件系統&#xff0c;在2020年被Apache基金會認可為頂級項目。 二、IoT領域發展趨勢 ?5G與IoT?&#x…

Next.js面試題:API深度解析

Next.js面試題&#xff1a;API深度解析 Next.js 通過 App Router 的引入徹底改變了 Web 開發范式。在這個新時代&#xff0c;深入理解 Next.js 的 API 函數不再只是錦上添花&#xff0c;而是技術面試中的關鍵區分點。這些函數構成了構建高性能、可擴展、現代化 Web 應用的基石…