有点麻烦直接上代码

#include <Adafruit_GFX.h>

#include <Adafruit_ST7735.h>

#include <NTPClient.h>//时间服务提供程序

//#include <WiFi.h> // for WiFi shield

#include <ESP8266WiFi.h>

#include <WiFiUdp.h>

#include <ArduinoJson.h>

#include <HTTPClient.h>//HTTP服务

#include "MyFont.h"

#include "pic.h"

#define TFT_SCLK 1 // Clock out

#define TFT_MOSI 3 // Data out

#define TFT_RST 16

#define TFT_DC 2

#define TFT_CS 0

//______TFT_BL 不接

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

void showMyFont(int32_t x, int32_t y, const char c[3], uint32_t color) {

for (int k = 0; k <= 55; k++)// 根据字库的字数调节循环的次数

if (hanzi[k].Index[0] == c[0] && hanzi[k].Index[1] == c[1] && hanzi[k].Index[2] == c[2])

{

tft.drawBitmap(x, y, hanzi[k].hz_Id, hanzi[k].hz_width, 16, color);

}

}

/*******************整句汉字显示****************/

void showMyFonts(int32_t x, int32_t y, const char str[], uint32_t color) {

//显示整句汉字,字库比较简单,上下、左右输出是在函数内实现

int x0 = x;

for (int i = 0; i < strlen(str); i += 3) {

showMyFont(x0, y, str+i, color);

x0 += 17;

}

}

const char *ssid = "MIX4";//改为你的WiFi名称

const char *password = "12345678";//改为你的WiFi密码

const char *host = "api.seniverse.com";//心知天气服务器地址

String now_address="",now_temperature="",now_weather="",now_weather_code="";

//用来存储报文得到的字符串

WiFiUDP ntpUDP;

NTPClient timeClient(ntpUDP,"ntp.aliyun.com");

void setup()

{

tft.initR(INITR_BLACKTAB);

tft.setRotation(1);

tft.fillScreen(ST7735_BLACK);

tft.setTextColor(ST7735_YELLOW);

tft.setTextSize(1);

//tft.print("Hello!");

WiFi.begin(ssid, password);

while ( WiFi.status() != WL_CONNECTED )

{

delay ( 500 );

tft.print ( "." );

}

tft.setTextSize(2);

tft.println("");

tft.println("WiFi connected"); //连接成功

tft.print("IP address: \n"); //打印IP地址

tft.println(WiFi.localIP());

tft.println("Initializing...");

delay(2000);

tft.fillScreen(ST7735_BLACK);

tft.drawLine(0,23, 128, 23, ST7735_WHITE); //画线

tft.drawLine(0,60, 128, 60, ST7735_WHITE); //画线

timeClient.begin();

timeClient.setTimeOffset(28800); // + 1区 偏移3600, +8区 :3600×8 = 28800

//tft.setSwapBytes(true); // RGB->BGR,更改显示颜色模式。

}

void Display_Time() {

timeClient.update();

unsigned long epochTime = timeClient.getEpochTime();

//打印时间

int currentSec = timeClient.getSeconds();

int currentMinute = timeClient.getMinutes();

int currentHour = timeClient.getHours();

int weekDay = timeClient.getDay();

//将epochTime换算成年月日

struct tm *ptm = gmtime ((time_t *)&epochTime);

int monthDay = ptm->tm_mday;

int currentMonth = ptm->tm_mon+1;

int currentYear = ptm->tm_year+1900;

tft.fillRect(102,42,22,14,ST7735_BLACK); //部分区域清屏,刷新秒

//10+2+10=22,“数字”分辨率10*14像素,连续显示时间隔2像素

tft.setCursor(102, 42); //设置文本起始坐标

tft.setTextColor(ST7735_RED); //设置文本颜色为白色

tft.setTextSize(2); //设置文字的大小 (1~7)

if (currentSec < 10){ //将 0-9 变为00-09

tft.println(0);

tft.setCursor(114, 42);

tft.setTextColor(ST7735_RED);

tft.setTextSize(2);

tft.println(currentSec);

}

else{

tft.println(currentSec); //显示文字

}

if (currentSec==0){ //刷新分

tft.fillRect(55,28,44,28,ST7735_BLACK); //20+4+20=44

}

tft.setCursor(55, 28);

//tft.setTextFont(7);

tft.setTextColor(ST7735_CYAN);

tft.setTextSize(4);

if (currentMinute < 10) {

tft.println(0);

tft.setCursor(79, 28);

tft.setTextColor(ST7735_CYAN);

tft.setTextSize(4);

tft.println(currentMinute);

}

else{

tft.println(currentMinute);

}

if (currentMinute==0 && currentSec==0){ //刷新时

tft.fillRect(1,28,44,28,ST7735_BLACK);

}

tft.setCursor(1, 28);

//tft.setTextFont(7);

tft.setTextColor(ST7735_CYAN);

tft.setTextSize(4);

if (currentHour < 10) {

//tft.println(0);

tft.setCursor(25, 28);

tft.setTextColor(ST7735_CYAN);

tft.setTextSize(4);

tft.println(currentHour);

}

else{

tft.println(currentHour);

}

tft.setCursor(40,28); //时分分隔符

tft.setTextColor(ST7735_CYAN);

tft.setTextSize(4);

tft.println(":");

tft.setCursor(89,5);//月日分隔符

tft.setTextColor(ST7735_WHITE);

tft.setTextSize(2);

tft.println("/");

if (currentHour==0 && currentMinute==0 && currentSec==0){ //刷新 日、周

tft.fillRect(102,5,22,14,ST7735_BLACK);

tft.fillRect(5,5,32,16,ST7735_BLACK);

}

tft.setCursor(102, 5);

tft.setTextColor(ST7735_YELLOW);

tft.setTextSize(2);

if (currentHour==0 && currentMinute==0 && currentSec==0){      //刷新 日、周
    tft.fillRect(102,5,22,14,ST7735_BLACK); 
    tft.fillRect(5,5,32,16,ST7735_BLACK); 
  }
  tft.setCursor(102, 5);                
  tft.setTextColor(ST7735_YELLOW);          
  tft.setTextSize(2);                   
  if (monthDay < 10) {
    //tft.println(0);                         //"1_月01日",感觉太奇怪了,还是"1_月_1日"吧!
    tft.setCursor(114, 5);         
    tft.setTextColor(ST7735_YELLOW);    
    tft.setTextSize(2);             
    tft.println(monthDay);  
  }
  else {
    tft.println(monthDay);    
  } 
    
  switch(weekDay){    
    case 0:          
        tft.setCursor(40, 10);                  
        tft.setTextColor(ST7735_YELLOW);            
        tft.setTextSize(1);             
        tft.print( "Sun");
        showMyFonts(5,5,"周日" , ST7735_BLUE);
        break; 
    case 1: 
        tft.setCursor(40, 10);                  
        tft.setTextColor(ST7735_YELLOW);            
        tft.setTextSize(1);             
        tft.print( "Mon");
        showMyFonts(5,5,"周一" , ST7735_BLUE);
        break; 
    case 2: 
        tft.setCursor(40, 10);                  
        tft.setTextColor(ST7735_YELLOW);            
        tft.setTextSize(1);             
        tft.print( "Tue");
        showMyFonts(5,5,"周二" , ST7735_BLUE);
        break;
    case 3:
        tft.setCursor(40, 10);                  
        tft.setTextColor(ST7735_YELLOW);            
        tft.setTextSize(1);             
        tft.print( "Wed");
        showMyFonts(5,5,"周三" , ST7735_BLUE);
        break;
    case 4: 
        tft.setCursor(40, 10);                  
        tft.setTextColor(ST7735_YELLOW);            
        tft.setTextSize(1);             
        tft.print( "Thu");
        showMyFonts(5,5,"周四" , ST7735_BLUE);
        break;
    case 5: 
        tft.setCursor(40, 10);                  
        tft.setTextColor(ST7735_YELLOW);            
        tft.setTextSize(1);             
        tft.print( "Fri");
        showMyFonts(5,5,"周五" , ST7735_BLUE);
        break;
    case 6: 
        tft.setCursor(40, 10);                  
        tft.setTextColor(ST7735_YELLOW);            
        tft.setTextSize(1);             
        tft.print( "Sat");
        showMyFonts(5,5,"周六" , ST7735_BLUE);
        break;
    default: break;
  }

if (monthDay==1 && currentHour==0 && currentMinute==0 && currentSec==0){   //刷新月
    tft.fillRect(65,5,22,14,ST7735_BLACK); 
  }
  tft.setCursor(65, 5);                 
  tft.setTextColor(ST7735_YELLOW);        
  tft.setTextSize(2);                    
  if (currentMonth <10) {
    //tft.println(0);                        //"_1月_1日"比"1_月_1日"更好一点!
    tft.setCursor(77, 5);               
    tft.setTextColor(ST7735_YELLOW);          
    tft.setTextSize(2);                    
    tft.println(currentMonth);
  }
  else {
    tft.println(currentMonth);               
  }

if (currentMonth==1 && monthDay==1 && currentHour==0 && currentMinute==0 && currentSec==0){  //刷新年
    tft.fillRect(102,28,23,7,ST7735_BLACK); 
  }
  tft.setCursor(102, 28);             
  tft.setTextColor(ST7735_RED);          
  tft.setTextSize(1);                       
  tft.println(currentYear);               
  //delay(1000);
}

void Display_Weather() {

//创建TCP连接

WiFiClient client;

const int httpPort = 80;

if (!client.connect(host, httpPort))

{tft.setCursor(150, 28);

tft.setTextColor(ST7735_RED);

tft.setTextSize(2);

tft.println("connection failed"); //网络请求无响应打印连接失败

return;

}

String url ="/v3/weather/now.json?key=S-nTkWZ3fFF8k2Lfh&location=xuchang&language=zh-Hans&unit=c";

//URL请求地址 //改为你的api密钥和城市拼音

//String url ="/v3/weather/now.json?key=your_kpi_password=xuchang&language=zh-Hans&unit=c";

//发送网络请求

client.print(String("GET ") + url + " HTTP/1.1\r\n" +

"Host: " + host + "\r\n" +

"Connection: close\r\n\r\n");

//delay(5000);

for(int i = 0; i < 5; i++) {

Display_Time();//利用等待 天气服务器响应的时间 更新时间信息

delay(1000); //间隔1秒访问ntp,刷新时间戳

}

//定义answer变量用来存放请求网络服务器后返回的数据

String answer;

while(client.available())

{

String line = client.readStringUntil('\r');

answer += line;

}

//断开服务器连接

client.stop();

//Serial.println();

//Serial.println("closing connection");

//获得json格式的数据

String jsonAnswer;

int jsonIndex;

//找到有用的返回数据位置i 返回头不要

for (int i = 0; i < answer.length(); i++) {

if (answer[i] == '{') {

jsonIndex = i;

break;

}

}

jsonAnswer = answer.substring(jsonIndex);

//解析获取到的json数据

// Stream& input;

StaticJsonDocument<512> doc;

DeserializationError error = deserializeJson(doc, jsonAnswer);

if (error) {

tft.setCursor(160, 28);

tft.setTextColor(ST7735_RED);

tft.setTextSize(2);

tft.print("deserializeJson() failed: ");

tft.println(error.c_str());

return;

}

JsonObject results_0 = doc["results"][0];

JsonObject results_0_location = results_0["location"];

const char* results_0_location_id = results_0_location["id"]; // "WW0CWDZP17BC"

const char* results_0_location_name = results_0_location["name"]; // "许昌"

const char* results_0_location_country = results_0_location["country"]; // "CN"

const char* results_0_location_path = results_0_location["path"]; // "许昌,许昌,河南,中国"

const char* results_0_location_timezone = results_0_location["timezone"]; // "Asia/Shanghai"

const char* results_0_location_timezone_offset = results_0_location["timezone_offset"]; // "+08:00"

JsonObject results_0_now = results_0["now"];

const char* results_0_now_text = results_0_now["text"]; // "阴"

const char* results_0_now_code = results_0_now["code"]; // "9"

const char* results_0_now_temperature = results_0_now["temperature"]; // "3"

const char* results_0_last_update = results_0["last_update"]; // "2022-01-29T17:25:01+08:00"

now_address = results_0_location_name;

now_weather = results_0_now_text;

now_weather_code = results_0_now_code;

now_temperature = results_0_now_temperature;

tft.fillRect(5,65,32,16,ST7735_BLACK); //打印地区

if(now_address=="许昌") {

showMyFonts(5,65,"许昌" , ST7735_BLUE);

}

#define X 4

#define Y 110

#define pX 68

#define pY 68

tft.fillRect(X,Y,64,16,ST7735_BLACK);

tft.fillRect(68,68,60,60,ST7735_BLACK);

/*switch (std::atoi(now_weather_code.c_str())) {//天气代码不是int类型,要先转换

/************************************************************************************

天气代码是由心知天气的API接口提供的,详见[天气现象代码说明]

(https://seniverse.yuque.com/books/share/e52aa43f-8fe9-4ffa-860d-96c0f3cf1c49/yev2c3)

*************************************************************************************/

/* case 0:

showMyFonts(X,Y,"晴", ST7735_GREEN);

tft.drawBitmap(pX,pY,51,51,p0_5151);

break;

case 1:

showMyFonts(X,Y,"夜晚晴",ST7735_GREEN);

tft.pushImage(pX,pY, 51,52,p1_5152);

break;

case 2: showMyFonts(X,Y,"晴" , ST7735_GREEN); tft.pushImage(pX,pY, 51,51,p0_5151);break;

case 3: showMyFonts(X,Y,"夜晚晴" , TFT_GREEN); tft.pushImage(pX,pY, 51,52,p1_5152);break;

case 4: showMyFonts(X,Y,"多云" , TFT_GREEN); tft.pushImage(pX,pY, 60,47,p4_6047);break;

case 5: showMyFonts(X,Y,"晴间多云" , TFT_GREEN); tft.pushImage(pX,pY, 60,44,p5_6044);break;

case 6: showMyFonts(X,Y,"晴间多云" , TFT_GREEN); tft.pushImage(pX,pY, 60,51,p6_6051);break;

case 7: showMyFonts(X,Y,"大部多云" , TFT_GREEN); tft.pushImage(pX,pY, 60,42,p7_6042);break;

case 8: showMyFonts(X,Y,"大部多云" , TFT_GREEN); tft.pushImage(pX,pY, 56,49,p8_5649);break;

case 9: showMyFonts(X,Y,"阴" , TFT_GREEN); tft.pushImage(pX,pY, 60,40,p9_6040);break;

case 10: showMyFonts(X,Y,"阵雨" , TFT_GREEN); tft.pushImage(pX,pY, 60,59,p10_6059);break;

case 11: showMyFonts(X,Y,"雷阵雨" , TFT_GREEN); tft.pushImage(pX,pY, 56,56,p11_5656);break;

case 12: {//滚动显示,这里还需要优化

tft.pushImage(pX,pY, 56,56,p12_5656);

showMyFonts(X,Y,"雷阵雨伴" , TFT_GREEN);delay(500);

tft.fillRect(X,Y,64,16,TFT_BLACK);

showMyFonts(X,Y,"阵雨伴有" , TFT_GREEN);delay(500);

tft.fillRect(X,Y,64,16,TFT_BLACK);

showMyFonts(X,Y,"雨伴有冰" , TFT_GREEN);delay(500);

tft.fillRect(X,Y,64,16,TFT_BLACK);

showMyFonts(X,Y,"伴有冰雹" , TFT_GREEN);delay(500);

tft.fillRect(X,Y,64,16,TFT_BLACK);

showMyFonts(X,Y,"阵雨冰雹" , TFT_GREEN);break;

}

case 13: showMyFonts(X,Y,"小雨" , TFT_GREEN); tft.pushImage(pX,pY, 56,54,p13_5654);break;

case 14: showMyFonts(X,Y,"中雨" , TFT_GREEN); tft.pushImage(pX,pY, 56,54,p14_5654);break;

case 15: showMyFonts(X,Y,"大雨" , TFT_GREEN); tft.pushImage(pX,pY, 56,54,p15_5654);break;

case 16: showMyFonts(X,Y,"暴雨" , TFT_GREEN); tft.pushImage(pX,pY, 56,54,p16_5654);break;

case 17: showMyFonts(X,Y,"大暴雨" , TFT_GREEN); tft.pushImage(pX,pY, 57,54,p17_5754);break;

case 18: showMyFonts(X,Y,"特大暴雨" , TFT_GREEN); tft.pushImage(pX,pY, 57,54,p18_5754);break;

case 19: showMyFonts(X,Y,"冻雨" , TFT_GREEN); tft.pushImage(pX,pY, 56,57,p19_5657);break;

case 20: showMyFonts(X,Y,"雨夹雪" , TFT_GREEN); tft.pushImage(pX,pY, 56,55,p20_5655);break;

case 21: showMyFonts(X,Y,"阵雪" , TFT_GREEN); tft.pushImage(pX,pY, 56,56,p21_5656);break;

case 22: showMyFonts(X,Y,"小雪" , TFT_GREEN); tft.pushImage(pX,pY, 56,53,p22_5653);break;

case 23: showMyFonts(X,Y,"中雪" , TFT_GREEN); tft.pushImage(pX,pY, 56,53,p23_5653);break;

case 24: showMyFonts(X,Y,"大雪" , TFT_GREEN); tft.pushImage(pX,pY, 56,53,p24_5653);break;

case 25: showMyFonts(X,Y,"暴雪" , TFT_GREEN); tft.pushImage(pX,pY, 56,56,p25_5656);break;

case 26: showMyFonts(X,Y,"浮尘" , TFT_GREEN); tft.pushImage(pX,pY, 53,45,p26_5345);break;

case 27: showMyFonts(X,Y,"扬沙" , TFT_GREEN); tft.pushImage(pX,pY, 53,45,p26_5345);break;

case 28: showMyFonts(X,Y,"沙尘暴" , TFT_GREEN); tft.pushImage(pX,pY, 58,34,p28_5834);break;

case 29: showMyFonts(X,Y,"强沙尘暴" , TFT_GREEN); tft.pushImage(pX,pY, 58,34,p28_5834);break;

case 30: showMyFonts(X,Y,"雾" , TFT_GREEN); tft.pushImage(pX,pY, 54,50,p30_5450);break;

case 31: showMyFonts(X,Y,"霾" , TFT_GREEN); tft.pushImage(pX,pY, 56,50,p31_5650);break;

case 32: showMyFonts(X,Y,"风" , TFT_GREEN); tft.pushImage(pX,pY, 56,44,p32_5644);break;

case 33: showMyFonts(X,Y,"大风" , TFT_GREEN); tft.pushImage(pX,pY, 56,44,p32_5644);break;

case 34: showMyFonts(X,Y,"飓风" , TFT_GREEN); tft.pushImage(pX,pY, 56,56,p34_5656);break;

case 35: showMyFonts(X,Y,"热带风暴" , TFT_GREEN); tft.pushImage(pX,pY, 56,56,p34_5656);break;

case 36: showMyFonts(X,Y,"龙卷风" , TFT_GREEN); tft.pushImage(pX,pY, 56,55,p36_5655);break;

case 37: showMyFonts(X,Y,"冷" , TFT_GREEN); tft.pushImage(pX,pY, 51,58,p37_5158);break;

case 38: showMyFonts(X,Y,"热" , TFT_GREEN); tft.pushImage(pX,pY, 51,51,p38_5151);break;

case 99: showMyFonts(X,Y,"未知" , TFT_GREEN); tft.pushImage(pX,pY, 53,23,p99_5323);break;

default: break;

}*/

tft.fillRect(5,87,63,16,ST7735_BLACK);

tft.setCursor(5, 88);

tft.setTextColor(ST7735_BLUE);

tft.setTextSize(2);

tft.println(now_temperature);

if ( (( std::atoi(now_temperature.c_str()) ) < 10) && (( std::atoi(now_temperature.c_str()) ) >= 0)) {

showMyFonts(24,87,"℃",ST7735_BLUE);

}

else{

showMyFonts(40,87,"℃",ST7735_BLUE);

}

}

void loop() {

// put your main code here, to run repeatedly:

Display_Weather(); //天气信息每2分钟更新一次

for(int i = 0; i < 115; i++) {

Display_Time();

delay(1000); //间隔1秒访问ntp,刷新时间戳

}

}

使用手机+ardinuo+esp01做的网络时钟相关推荐

  1. 手机uc怎么放大页面_手机网站怎样做可以提高用户体验度?——竹晨网络

    目前,手机已经占据了人们大多数的闲暇时间,互联网的流量开始逐渐向移动端倾斜,重视移动端的用户体验,就可以给客户端增加很多意想不到的功能.但是还是有很多公司和站长不知道手机网站应该怎么建才能符合用户的使 ...

  2. 为什么开不了4g网络_为什么4G网络越来越慢?究竟是你手机出了问题还是网络原因?...

    Hi,大家好,我是小雨!许多人都有这样的一种感受,明明使用的是4G网络,但有时候上网的速度却是非常慢,有一种"龟速"的感觉.尤其是在车站.集市.商场等人员密集的地方更是如此. 那么 ...

  3. 第一种可以用手机远程实时观看的网络摄像机,还带云台,报警,双向语音

    FI-361是一款P2P传输.即插即用的手机远程实时监控无线网络摄像机,目前最清晰最流畅的家用WiFi网络摄像机,带云台,用手机滑动可控制网络摄 像机转动,它支持多人同时观看,您买回家只需接入电源.网 ...

  4. NTP网络时钟同步协议对计算机网络数据的重要性

    NTP网络时钟同步协议对计算机网络数据的重要性 概述:电脑时间走时不准是出了名的.它一般是以廉价的振荡电路或石英钟为基础,每天的误差可达数秒,经过一段时间的累积就会出现较大的误差.随着不断增加的分散式 ...

  5. ntp网络时间服务器(网络时钟同步)客户端与服务器端设置方法说明

    ntp网络时间服务器(网络时钟同步)客户端与服务器端设置方法说明 更多资料参考--安徽京准--ahjzsz.COM 为了让文件上的时间戳保持一致,我们需要对服务器进行ntp时间同步. ntp服务器分服 ...

  6. windows通过安卓手机的【usb共享网络】上网突然无法上网的解决

    windows(win7)通过安卓手机的[usb共享网络]上网突然无法上网的解决 心血来潮,写了这篇文章,在此记录一下. 环境: 安卓10 win7 排查问题过程: 关于这个问题,我上网搜了一圈也没搜 ...

  7. 《屏幕上的聪明决策》:4星。人类在手机/电脑上做选择的心理学研究的综述。不流畅的文本有助于理解和记忆,淘汰赛制可以有效降低选择后懊悔。...

    本书是人类在手机/电脑上做选择的心理学研究的综述,比较可信,有许多有趣的事实与结论.比较重要的结论有这么几个: 1:人类对网站.文章的判断很大程度上以来瞬间感知和审美: 2:不流畅的文本有助于理解和记 ...

  8. NTP网络时钟同步系统技术发展前景

    NTP网络时钟同步系统技术发展前景 1.引言 作为数字通信网的基础支撑技术,时钟同步技术的发展演进始终受到通信网技术发展的驱动.在网络方面,通信网从模拟发展到数字,从TDM网络为主发展到以分组网络为主 ...

  9. android wifi 共享网络,安卓手机怎么共享XP的网络 无线wifi共享教程【详解】

    安卓手机怎么共享XP的网络? Wi-Fi是一个无线网络通信技术的品牌,由Wi-Fi联盟(Wi-Fi Alliance)所持有.目的是改善基于IEEE802.11标准的无线网络产品之间的互通性.无线网络 ...

  10. 手机表格html5,手机上怎么做表格?

    手机上怎么做表格?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 手机上怎么做表格? 我的手机都是通过下载安装wps这个 ...

最新文章

  1. u盘安装ubuntu10.04 、11.04 server
  2. 干货 | 算法工程师入门第二期——穆黎森讲增强学习(一)
  3. NS3中数据包添加有效负载
  4. 数据库基础:MySQL必备的三个工具
  5. 在英文Win7操作系统上部署C#开发的Web系统出现乱码的解决方法
  6. 新年里真挚的情怀共祝愿南阳好
  7. 超级表格有没有协作人数限制?
  8. List中remove()方法的陷阱,开发谨记!
  9. 开一家最美证件照照相馆需要注意什么
  10. html扩展调用qq邮箱
  11. pageCache和bufferCache
  12. 一周肝出Linux之远程服务详解(ssh远程登录、scp远程复制、sftp安全下载、TCP Wrappers访问控制)
  13. 微信公众号开发 - token获取(保证同一时间段内只请求一次)
  14. chrome 下使用维基百科
  15. kafka 自定义Interceptor(通过拦截器对消息进行定制化处理)
  16. 吾爱破解 2023 春节解题领红包之 Web 题解
  17. Linux脚本定时清理日志任务
  18. 验尸官称Debian创始人 Ian Murdock 是自杀身亡
  19. 完整版 | 2021 年 Apache Pulsar 用户调查报告
  20. 迷宫游戏纯c语言代码,C++ 迷宫游戏实现代码

热门文章

  1. 小招喵喜欢吃喵粮(贪心、二分查找)
  2. 北漂8年的程序员,终于在疫情之下决定撤退老家了
  3. Mono.Cecil使用示例之给UnityEditor.dll中的ConsoleWindow添加双击委托
  4. 计算机多显器设置方法,一个电脑多个显示器怎么设置
  5. 工信部发布八项互联网新通用顶级域名服务技术要求
  6. 圈内著名ts_TS欠薪几百万遭实锤,阿泰被玩弄于股掌,权谋剧情比宫斗还精彩...
  7. 阿里云短信服务接口触发天级流控Permits:10
  8. java http put请求方式_HttpClient HTTP PUT请求方法示例
  9. 网吧流媒体服务器系统,网吧视频点播服务器架设完全攻略流媒体服务器 -电脑资料...
  10. 恩淑 2004-12-18