欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > 8.TCP Server端实现

8.TCP Server端实现

2025/6/20 2:08:00 来源:https://blog.csdn.net/a2123827797/article/details/148695214  浏览:    关键词: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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词