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

竭诚网络网站建设公司wordpress集成环境有哪些

竭诚网络网站建设公司,wordpress集成环境有哪些,企业管理咨询自考,广告设计软件叫什么ESP-C3入门10. 创建TCP Client一、创建 tcp client的一般步骤1. 创建 tcp 套接字2. 配置服务器地址3. 连接服务器4. 发送数据5. 接收数据6. 关闭套接字二、创建tcp_client任务三、示例代码1. tcpClient.h2. tcpClient.c3. main.c一、创建 tcp client的一般步骤 本文示例使用的… ESP-C3入门10. 创建TCP Client一、创建 tcp client的一般步骤1. 创建 tcp 套接字2. 配置服务器地址3. 连接服务器4. 发送数据5. 接收数据6. 关闭套接字二、创建tcp_client任务三、示例代码1. tcpClient.h2. tcpClient.c3. main.c一、创建 tcp client的一般步骤 本文示例使用的是阻塞IO进行网络通讯。 在高性能的网络编程中可能会使用非阻塞IO或异步IO进行网络通讯。 1. 创建 tcp 套接字 使用 socket函数 int sock socket(AF_INET, SOCK_STREAM, IPPROTO_IP);2. 配置服务器地址 struct sockaddr_in server_addr; server_addr.sin_family AF_INET; server_addr.sin_port htons(server_port); inet_pton(AF_INET, server_ip, server_addr.sin_addr); 3. 连接服务器 int ret connect(sock, (struct sockaddr *)server_addr, sizeof(server_addr)); if (ret ! 0) {ESP_LOGE(TAG, Failed to connect to server, errno%d, errno);close(sock);return; } 4. 发送数据 int bytes_sent send(sock, send_buf, send_len, 0); if (bytes_sent 0) {ESP_LOGE(TAG, Failed to send data to server, errno%d, errno);close(sock);return; }5. 接收数据 // 接收数据 int bytes_recv recv(sock, recv_buf, recv_buf_size, 0); if (bytes_recv 0) {ESP_LOGE(TAG, Failed to receive data from server, errno%d, errno);close(sock);return; }6. 关闭套接字 close(sock);二、创建tcp_client任务 由于网络通信涉及到阻塞IO操作如果在主线程中直接调用网络API会导致主线程被阻塞无法处理其他任务。为了避免这种情况发生可以将网络通信放在RTOS任务中处理使得主线程可以继续运行。 另外使用RTOS任务的好处还在于可以方便地控制任务的优先级、堆栈大小等参数以及在需要的时候暂停、恢复、删除任务等操作。这样可以更加灵活地管理程序中的各个任务实现复杂的多任务协作。 示例使用 xTaskCreate函数创建freeRTOS的任务 xTaskCreate(tcp_client_task, tcp_client_task, 4096, NULL, 5, NULL);任务优先级是5栈大小是4096 定义连接tcp 的任务时注意需要保留参数 void tcp_client_task(void* pvParameters);三、示例代码 本示例会接前面章节连接WIFI的部分帮wifi.c wifi.h部分代码不重复编写 。 下面示例中tcpClient连接上服务器后会发送ping消息并等待服务器回应。如果服务器回应pong则握手成功 客户端继续发送10个报文 然后关闭连接重新请求连接服务端。 参考项目目录结构如下 1. tcpClient.h // // Created by hs26661 on 2023/2/16. //#ifndef ESP32_LEARN_TCPCLIENT_H #define ESP32_LEARN_TCPCLIENT_H#include string.h #include sys/socket.h #include netdb.h #include unistd.h void tcp_client_task(void* pvParameters);#endif //ESP32_LEARN_TCPCLIENT_H 2. tcpClient.c // // Created by hs26661 on 2023/2/16. // #include lwip/sockets.h #include esp_log.h#define SERVER_HOST 192.18.200.28 #define SERVER_PORT 3000 #define MESSAGE ping #define MAX_RETRY 5 // 最大重试次数 #define DATA_SIZE 256 // 数据包大小static const char *TAG TCP_CLIENT;/*** 创建 freeRtos任务 这里的参数注意不能删除* param pvParameters*/ void tcp_client_task(void* pvParameters){// 重试次数int retry_count 0;// 接收缓冲区char rx_buffer[DATA_SIZE];// 发送缓冲区char tx_buffer[DATA_SIZE];while(1){// 创建套接字struct sockaddr_in dest_addr;dest_addr.sin_addr.s_addr inet_addr(SERVER_HOST);dest_addr.sin_family AF_INET;dest_addr.sin_port htons(SERVER_PORT);int sock socket(AF_INET, SOCK_STREAM, IPPROTO_IP);// 连接服务端int err connect(sock, (struct sockaddr*) dest_addr, sizeof(dest_addr));if(err ! 0){if(retry_count MAX_RETRY){ESP_LOGE(TAG, connect failure retry limit);break;}ESP_LOGW(TAG, connect failure, retry count%d, retry_count);vTaskDelay(2000 / portTICK_PERIOD_MS);continue;}ESP_LOGI(TAG, connect to server success);retry_count 0;// 发送pingint tx_len sprintf(tx_buffer, MESSAGE);err send(sock, tx_buffer, tx_len, 0);if(err 0){ESP_LOGE(TAG, send ping failure);close(sock);continue;}// 接收pongint rx_len recv(sock,rx_buffer, sizeof(rx_buffer) -1, 0);if(rx_len0){ESP_LOGE(TAG, receive pong failure);close(sock);continue;}rx_buffer[rx_len] 0;if(strcmp(rx_buffer, pong) !0){ESP_LOGE(TAG, handshake failure);close(sock);continue;}ESP_LOGI(TAG, handshake success);// 发送数据包for(int i 0;i10;i){// 获取当前时间字符串time_t now time(NULL);struct tm timeinfo;localtime_r(now, timeinfo);char strftime_buf[64];strftime(strftime_buf , sizeof(strftime_buf), %c, timeinfo);// 发送数据包tx_len sprintf(tx_buffer, time:%s, strftime_buf);err send(sock, tx_buffer, tx_len, 0);if(err 0){ESP_LOGE(TAG, send data error);close(sock);break;}ESP_LOGI(TAG, send data %d success, i1);// 5秒后再发送vTaskDelay(5000 / portTICK_PERIOD_MS);}// 发送byetx_len sprintf(tx_buffer, bye);err send(sock, tx_buffer, tx_len, 0);if(err0){ESP_LOGE(TAG, send bye error);close(sock);continue;}// 关闭连接close(sock);ESP_LOGI(TAG, connection closed);// 重建 连接ESP_LOGI(TAG, reconnect);vTaskDelay(2000/ portTICK_PERIOD_MS);}vTaskDelete(NULL); }3. main.c #include string.h#include freertos/FreeRTOS.h #include freertos/task.h#include nvs_flash.h #include network/include/wifi.h #include network/include/tcpClient.hstatic const char *TAG wifi connection;void app_main() {int i 0;ESP_LOGE(TAG, app_main);// 初始化NVS存储区esp_err_t ret nvs_flash_init();if (ret ESP_ERR_NVS_NO_FREE_PAGES || ret ESP_ERR_NVS_NEW_VERSION_FOUND) {ESP_ERROR_CHECK(nvs_flash_erase());ret nvs_flash_init();}ESP_ERROR_CHECK(ret);// Wi-Fi初始化ESP_LOGI(TAG, Wi-Fi initialization);wifi_initialize();// Wi-Fi Station初始化wifi_station_initialize();// 创建 tcp client任务,优先级为5栈大小为4096xTaskCreate(tcp_client_task, tcp_client_task, 4096, NULL, 5, NULL);while (1) {vTaskDelay(pdMS_TO_TICKS(500));} } 运行结果 示例中使用阻塞IO通讯也可以将收发放在不同的任务中执行这样提高程序并发性在这种情况下可以创建两个套接字并使用同一服务器地址和端口号。在发送和接收数据时将不同的套接字分别用于不同的任务从而实现并发的发送和接收。 具体来说在两个任务中需要使用不同的套接字句柄socket handle来访问相同的服务器地址和端口。在每个任务中可以通过调用 socket()、connect() 和 close() 等函数来创建和管理套接字。发送和接收数据时需要在每个任务中使用不同的套接字句柄来分别发送和接收数据。 需要注意的是如果两个任务共用同一套接字句柄来进行发送和接收那么就可能会出现竞争条件导致数据错误或不完整。因此为了避免这种情况最好在每个任务中分别使用独立的套接字来进行通信。 本文不演示上述方案。
http://www.hkea.cn/news/14306709/

相关文章:

  • 完全免费网站源码教育智慧城市型网站开发
  • 做印刷品的素材网站微信怎么做链接推广产品
  • 网站建设优化方案建行个人网上银行
  • 做网站有什么js特效wordpress 文件发送邮件
  • 彩票网站建设策划书wordpress网站和微信公众号
  • 杭州网站seo公司宿迁专业网站三合一建设
  • 江西哪里可以做企业网站手机网站开发有前途
  • 重庆建设招标造价信息网站跨境电商erp选哪个好
  • 园区网站建设调研报告湖北城市建设职业技术学院网站
  • 上海做网站优化公司荆州做网站的公司
  • 淘宝联盟链接的网站怎么做的网站建设的目标客户
  • 如何给网站做高质量外链常用网站建设软件
  • 烟台快速建站有哪些公司设计网站中企动力优
  • 自己做网站要学什么软件下载七牛云存储代替WordPress
  • 朝阳区手机网站建设服务网站和微网站
  • 上海seo网站优化_搜索引擎排名_优化型企业网站建设_锦鱼网络医院网站设计方案
  • 音乐中文网站模板盗版小说网站怎么做
  • 永州网站建设收费情况wordpress数据库连接错误
  • asp.net空网站广州番禺邮政编码
  • 重庆梁平网站建设哪家好织梦仿站建站网站建设实战
  • 青岛快速网站排名网络推广有哪些形式
  • 商城网站如何建设网址站
  • 阿里云网站如何建设厦门 网站设计
  • 网站飘窗建设合同安徽省工程建设工程信息网站
  • 龙岗网站建设代理商仿牌外贸网站制作
  • 常州个人网站设计网站做排名
  • 定制家具网站平台现在流行用什么语言做网站
  • 描述一下网站建设的基本流程图seo外链是什么意思
  • 网站app软件企事业网站建设
  • 自己编程怎么做网站教程企业局域网视频网站建设