Winsock - проблема с подключением - PullRequest
0 голосов
/ 09 декабря 2010

Я строил небольшую программу для загрузки чего-то с сайта раз в день.Но всякий раз, когда я запускаю свою программу, она выдает «WSAConnectByName: возвращено FALSE с кодом ошибки 10109», что соответствует WSATYPE_NOT_FOUND в соответствии со списком на MSDN (http://msdn.microsoft.com/en-us/library/ms740668%28v=VS.85%29.aspx). Я действительно не понимаю, что я сделал неправильно. Кто-нибудь возражает против поискамоя ошибка?

#include <cstdio>
#include <iostream>
#include <string>
#include <boost/format.hpp>

#include <WinSock2.h>
#include <Ws2tcpip.h>
#include <windows.h>

static const TCHAR s_lpctszAddress[] = TEXT("www.google.com");

int main(int argc, char* argv[])
{
   using namespace std;
   using namespace boost;

   WSADATA wsaData;
   int iWSAStartup = WSAStartup(MAKEWORD(2, 2), &wsaData);

   if (!iWSAStartup)
   {
      SOCKET Socket = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, 0);
      if (Socket != INVALID_SOCKET)
      {
         INT iSize = sizeof(s_lpctszAddress);
         SOCKADDR saAddr;
         DWORD dwSOCKADDRLen = sizeof(saAddr);
         BOOL fConnect = WSAConnectByName(Socket, const_cast<LPWSTR>(s_lpctszAddress), TEXT("/"), &dwSOCKADDRLen, &saAddr, NULL, NULL, NULL, NULL);
         if (fConnect == TRUE)
         {
            cout << "Success!";
         }
         else
         {
            cout << format("WSAConnectByName: returned FALSE with error code %1%.") % WSAGetLastError() << endl;
         }
      }
      else
      {
         cout << format("WSASocket: returned INVALID_SOCKET with error %1%.") % WSAGetLastError() << endl;
      }
   }
   else
   {
      cout << format("WSAStartup: returned %1% with error %2%.") % iWSAStartup % WSAGetLastError() << endl;
   }

   return 0;
}

Ответы [ 2 ]

3 голосов
/ 09 декабря 2010

Тип службы недействителен: эта измененная строка кода работает для меня.

BOOL fConnect = WSAConnectByName(Socket, const_cast<LPWSTR>(s_lpctszAddress),
   TEXT("http"), &dwSOCKADDRLen, &saAddr, NULL, NULL, NULL, NULL);

По Документам Microsoft :

Имя службыпсевдоним строки для номера портаНапример, «http» - это псевдоним для порта 80, определенный Инженерной рабочей группой по Интернету (IETF) как порт по умолчанию, используемый веб-серверами для протокола HTTP.Возможные значения параметра servicename, если номер порта не указан, перечислены в следующем файле:

% WINDIR% \ system32 \ drivers \ etc \ services

1 голос
/ 09 декабря 2010

В качестве третьего параметра необходимо указать имя порта / службы.

...