📄 clientinetthread.cpp
字号:
// clientinetthread.cpp (uses MFC Wininet calls)
#include <stdafx.h>
#include "utility.h"
#define MAXBUF 50000
HWND g_hMainWnd = 0;
char g_pchStatus[25] = "";
CCriticalSection g_csStatus;
UINT ClientWinInetThreadProc(LPVOID pParam)
{
CCallbackInternetSession session;
CHttpConnection* pConnection = NULL;
CHttpFile* pFile1 = NULL;
char* buffer = new char[MAXBUF];
UINT nBytesRead = 0;
DWORD dwStatus;
try {
// username/password doesn't work yet
if(!g_strServerName.IsEmpty()) {
pConnection = session.GetHttpConnection(g_strServerName,
(INTERNET_PORT) g_nPort);
}
else {
pConnection = session.GetHttpConnection(g_strServerIP,
(INTERNET_PORT) g_nPort);
}
pFile1 = pConnection->OpenRequest(1, g_strFile, NULL, 1, NULL, NULL, // GET request
INTERNET_FLAG_KEEP_CONNECTION); // needed for NT Challenge/Response authentication
// INTERNET_FLAG_RELOAD forces reload from the server (bypasses client's cache)
pFile1->SendRequest();
pFile1->QueryInfoStatusCode(dwStatus);
TRACE("QueryInfoStatusCode = %d\n", dwStatus);
nBytesRead = pFile1->Read(buffer, MAXBUF - 1);
buffer[nBytesRead] = '\0'; // necessary for message box
char temp[100];
if(pFile1->Read(temp, 100) != 0) { // makes caching work if read complete
AfxMessageBox("File overran buffer -- not cached");
}
::MessageBox(::GetTopWindow(::GetDesktopWindow()), buffer, "WININET CLIENT", MB_OK);
// could use existing pFile1 to SendRequest again if we wanted to
}
catch(CInternetException* e) {
LogInternetException(pParam, e);
e->Delete();
}
// could call OpenRequest again on same connection if we wanted to
if(pFile1) delete pFile1; // does the close -- prints a warning
if(pConnection) delete pConnection; // why does it print a warning?
delete [] buffer;
g_csStatus.Lock();
strcpy(g_pchStatus, ""); // problem with empty string. bug #9897
g_csStatus.Unlock();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -