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

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

相关文章:

  • AWS ELB 可观测性最佳实践
  • 34. 在排序数组中查找元素的第一个和最后一个位置
  • 力扣刷题——长度最小的子数组
  • 在 Qt 开发中,.toLocal8Bit().constData() 和 .toUtf8()有什么区别
  • 【React源码解析】初识JSX
  • You Only Look Once Unified, Real-Time Object Detection论文笔记
  • django ReturnDict 如何修改内容
  • C++(从C到C++)
  • Java系统开发:前端与后端的协同开发实践
  • 老项目重构难题破解:飞算 JavaAI 如何实现技术升级突围
  • 数字ic后端设计从入门到精通7(含fusion compiler, tcl教学)sta时序分析
  • Java基础学习-多线程
  • python+uniapp基于微信小程序健康管理系统
  • 数字电路研究的是直流信号还是交流信号
  • BUU reverse (随机做题)
  • Postman中变量的使用
  • idea中配置svn及提交提示“未检测到更改”提示
  • uni-app插件,高德地图、地图区域绘制、定位打卡
  • 海报在线制作系统小程序ThinkPHP+UniApp
  • [论文阅读] 人工智能 + 软件工程 | 用大语言模型架起软件需求形式化的桥梁
  • 做网站简单吗/百度账号客服
  • 上海网站开发外包公司/广告推广免费
  • java网站建设/好项目推荐平台
  • 网站建设中 模板/seo代理计费系统
  • 笔记本怎么建设网站/seo诊断分析工具
  • 大桥外语官方网站星做宝贝/外贸独立站建站