SYSTEMTIME和time_t的用法例子

这个C++程序使用了<time.h>和<Windows.h>库来获取并打印本地时间,包括年、月、日、小时、分钟和秒。同时,它也展示了如何将时间戳转换为可读的时间格式。程序首先获取当前的本地时间,然后将其转换为结构体,并输出到控制台。接着,程序通过time()函数获取当前时间戳,再次进行格式化输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
#include <time.h>
#include <windows.h>
int main()
{
	SYSTEMTIME s;
    GetLocalTime(&s);
    printf("It's %d/%d/%d %02d:%02d:%02d now.", s.wYear, s.wMonth, s.wDay, s.wHour, s.wMinute, s.wMinute);
    printf("\nAnd it's the %d day of a week.", s.wDayOfWeek);

	struct tm *ptr;
    time_t lt;
    __int64 w(1617669906);
    lt = (time_t)w;
    printf("The Calendar Time now is %d\n", lt);
    ptr = localtime(&lt);
    printf("hour:%d minute:%d  second:%d \n ", ptr->tm_hour, ptr->tm_min, ptr->tm_sec);


    lt = time(NULL);
    printf("The Calendar Time now is %d\n", lt);
    ptr = localtime(&lt);
    printf("hour:%d minute:%d  second:%d \n ", ptr->tm_hour, ptr->tm_min, ptr->tm_sec);
    return 0;
}

<think>我们正在处理一个关于ISAPI与JavaScript交互的示例请求。ISAPI(Internet Server Application Programming Interface)是微软为IIS(Internet Information Services)提供的扩展接口,允许开发人员编写服务器端扩展(如过滤器或扩展程序)来增强Web服务器的功能。 由于ISAPI是服务器端技术,而JavaScript是客户端脚本语言,它们之间的交互通常通过HTTP请求响应进行。一种常见的方式是使用JavaScript发起AJAX请求到ISAPI扩展,然后ISAPI处理请求并返回数据给JavaScript。 下面是一个简单的示例,展示如何使用JavaScript调用ISAPI扩展: 1. **ISAPI扩展(C++)**:创建一个简单的ISAPI扩展,处理来自客户端的请求并返回JSON数据。 2. **JavaScript**:使用XMLHttpRequest(或Fetch API)向ISAPI扩展发送请求,并处理返回的数据。 ### 示例代码 #### ISAPI扩展(C++) 假设我们有一个ISAPI扩展,它被编译为DLL,并映射到IIS的某个路径(例如`/isapi/example.dll`)。以下是一个简化的处理函数,它处理GET请求并返回一个JSON字符串。 ```cpp #include <windows.h> #include <httpext.h> #include <string> // 假设我们有一个处理请求的函数 DWORD WINAPI HttpExtensionProc(EXTENSION_CONTROL_BLOCK *pECB) { // 获取请求方法 char *method = pECB->lpszMethod; // 只处理GET请求 if (strcmp(method, "GET") == 0) { // 设置响应头为JSON char *headers = "Content-Type: application/json\r\n"; DWORD dwSize = strlen(headers); pECB->ServerSupportFunction(pECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER, "200 OK", &dwSize, (LPDWORD)headers); // 构造JSON响应 std::string response = "{\"message\": \"Hello from ISAPI!\"}"; // 发送响应体 DWORD dwBytes = response.size(); pECB->WriteClient(pECB->ConnID, (void*)response.c_str(), &dwBytes, 0); } else { // 其他请求方法返回405 char *headers = "Content-Type: text/plain\r\n"; DWORD dwSize = strlen(headers); pECB->ServerSupportFunction(pECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER, "405 Method Not Allowed", &dwSize, (LPDWORD)headers); std::string response = "Method not allowed"; DWORD dwBytes = response.size(); pECB->WriteClient(pECB->ConnID, (void*)response.c_str(), &dwBytes, 0); } return HSE_STATUS_SUCCESS; } ``` #### JavaScript调用 在HTML页面中,使用JavaScript发起GET请求到ISAPI扩展: ```html <!DOCTYPE html> <html> <head> <title>ISAPI and JavaScript Interaction</title> </head> <body> <button onclick="callISAPI()">Call ISAPI</button> <div id="result"></div> <script> function callISAPI() { var xhr = new XMLHttpRequest(); xhr.open('GET', '/isapi/example.dll', true); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { if (xhr.status === 200) { var response = JSON.parse(xhr.responseText); document.getElementById('result').innerHTML = response.message; } else { console.error('Error:', xhr.status); } } }; xhr.send(); } </script> </body> </html> ``` ### 说明 1. **ISAPI扩展**:当收到GET请求时,它发送一个JSON响应`{"message": "Hello from ISAPI!"}`。注意,实际开发中需要处理更多的细节,如错误处理、不同的请求参数等。 2. **JavaScript**:当用户点击按钮时,发起一个AJAX请求到ISAPI扩展的URL,然后解析返回的JSON数据并显示在页面上。 ### 注意事项 - ISAPI扩展通常用C++编写,并且需要编译为DLL,然后在IIS中配置。 - 由于ISAPI是较老的技术,现代Web开发中更常用ASP.NET、Node.js等,但如果你需要维护旧系统,可能会遇到ISAPI。 - 安全性:确保ISAPI扩展正确处理输入,避免安全漏洞(如缓冲区溢出)。 ### 相关问题 1. ISAPI扩展CGI有什么区别? 2. 如何在IIS中配置ISAPI扩展? 3. 除了返回JSON,ISAPI扩展还能返回什么类型的数据? 4. 如何从JavaScript向ISAPI扩展发送POST请求并处理数据?</think>### ISAPI与JavaScript交互示例 ISAPI(Internet Server Application Programming Interface)是微软IIS服务器的扩展接口,通常用于开发高性能的服务器端模块。与JavaScript的交互主要通过HTTP请求/响应实现,以下是两种典型场景的示例: #### 1. JavaScript调用ISAPI扩展(GET请求) ```html <!-- 前端页面 --> <button onclick="callISAPI()">获取服务器时间</button> <script> function callISAPI() { fetch("/isapi/TimeExtension.dll?action=getTime") .then(response => response.text()) .then(data => { alert("服务器时间: " + data); }); } </script> ``` ```cpp // ISAPI扩展 (C++) DWORD WINAPI GetExtensionVersion(HSE_VERSION_INFO* pVer) { pVer->dwExtensionVersion = HSE_VERSION; return TRUE; } DWORD WINAPI HttpExtensionProc(EXTENSION_CONTROL_BLOCK* pECB) { // 解析action参数 char* action = pECB->lpszQueryString; if (strcmp(action, "getTime") == 0) { // 生成响应 SYSTEMTIME st; GetSystemTime(&st); char res[50]; sprintf(res, "%04d-%02d-%02d %02d:%02d", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute); // 设置HTTP头 DWORD dwSize = strlen(res); pECB->dwHttpStatusCode = 200; pECB->ServerSupportFunction(pECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER, "200 OK", NULL, (LPDWORD)"Content-Type: text/plain"); // 发送响应体 pECB->WriteClient(pECB->ConnID, res, &dwSize, 0); } return HSE_STATUS_SUCCESS; } ``` #### 2. POST数据交互(JSON格式) ```html <!-- 前端页面 --> <script> function submitData() { const data = { username: "test", level: 5 }; fetch("/isapi/UserExtension.dll", { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }) .then(response => response.json()) .then(result => { console.log("处理结果:", result); }); } </script> ``` ```cpp // ISAPI扩展处理POST请求 DWORD WINAPI HttpExtensionProc(EXTENSION_CONTROL_BLOCK* pECB) { if (strcmp(pECB->lpszMethod, "POST") == 0) { // 读取POST数据 DWORD dwSize = pECB->cbTotalBytes; char* pBuf = new char[dwSize + 1]; pECB->ReadClient(pECB->ConnID, pBuf, &dwSize); pBuf[dwSize] = '\0'; // 解析JSON (需链接json库) JSONValue* json = JSON::Parse(pBuf); // 处理业务逻辑 JSONObject result; result[L"status"] = new JSONValue(L"success"); // 返回JSON响应 std::wstring res = JSON::Stringify(result); DWORD resLen = res.size() * sizeof(wchar_t); pECB->ServerSupportFunction(/* HTTP头设置 */); pECB->WriteClient(pECB->ConnID, (void*)res.c_str(), &resLen, 0); delete[] pBuf; } return HSE_STATUS_SUCCESS; } ``` ### 关键实现要点 1. **通信协议** - GET请求:通过`lpszQueryString`获取参数 - POST请求:使用`ReadClient`读取请求体 - 响应输出:`WriteClient`函数写入数据 2. **数据格式** - 推荐使用JSON格式交互 - 设置正确的Content-Type头: - `text/plain` 纯文本 - `application/json` JSON数据 3. **安全注意事项** - 验证请求来源(Referer检查) - 限制POST数据大小防止溢出 - 对输入数据进行严格过滤[^1] 4. **IIS配置** ```xml <!-- web.config --> <system.webServer> <handlers> <add name="ISAPI-Time" path="*.dll" verb="*" modules="IsapiModule" resourceType="File" /> </handlers> </system.webServer> ``` > **注意**:现代开发中更推荐使用ASP.NET代替原生ISAPI,但ISAPI仍适用于高性能场景(如实时视频处理)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值