Не удается использовать InternetConnect с IP-адресом (ошибка 12029)

Здесь у меня есть фрагмент, который не работает, когда я использую IP-адрес. Но в MSDN говорится, что параметр может быть десятичным IP-адресом с точками, поэтому он должен работать четко. Что случилось? Спасибо.

#include "stdafx.h"#include <windows.h>
#include <wininet.h>
#include <tchar.h>
#include <iostream>
#pragma comment(lib,"wininet.lib")
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
char szServer[] = "127.0.0.1";
char szUrl[] = "/test/upload.php";
char Data[] = "text123";
char szHdrs[] =    "Content-Type: multipart/form-data; boundary=AaB03x";
char szTead[] =    "--AaB03x\r\n""Content-Disposition: form-data; name=\"file\"; filename=\"test.txt\"\r\n""Content-Type: application/octet-stream\r\n""\r\n";
char szTail[] =     "\r\n""--AaB03x--\r\n";
char szUserAgent[] = "MyUA";
char *szTypes[] = {"*/*", NULL};
HINTERNET hIOpen = InternetOpenA(szUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if(!hIOpen)
{
printf("InternetOpenA Error\n");
}
HINTERNET hIConnect = InternetConnectA(hIOpen, szServer, INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
if(!hIConnect)
{
printf("InternetConnectA Error\n");
}
HINTERNET hHttpOpReq = HttpOpenRequestA(hIConnect, "POST", szUrl, NULL, NULL, (LPCSTR *)szTypes, 0, 1);
if(!hHttpOpReq)
{
printf("HttpOpenRequestA Error\n");
}
BOOL bHttpSendReq = HttpSendRequestA(hHttpOpReq, szHdrs, strlen(szHdrs), Data, strlen(Data));
if (!bHttpSendReq)
{   int Error = GetLastError();
printf("HttpSendRequest Error %d\n", Error);
}system("pause");
return 0;

}

Больше ничего не могу добавить, на самом деле об этой проблеме. Я использую Windows 7 x64 Ultimate и VS2008.

Теперь я проверил этот .exe на других машинах XP и Seven. Похоже, это работает, но не на моей машине. Может быть, проблема (там) где-то еще.

0

Решение

Три подсказки:

  1. Добавьте следующие флаги к вашему интернет-соединению:

    INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_NO_CACHE_WRITE

  2. Также добавьте http к вашему запросу:

    char szServer [] = «http://127.0.0.1«;

  3. Вы также можете попробовать использовать INTERNET_OPEN_TYPE_DIRECT вместо INTERNET_OPEN_TYPE_PRECONFIG

в моей кодовой базе у меня есть обходной путь для ошибки 12029, но это происходит только тогда, когда соединение теряется во время загрузки файла — чтобы исправить это, я должен полностью закрыть все дескрипторы WinInet и повторить попытку загрузки.

0

Другие решения


По вопросам рекламы [email protected]