首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Winsock -连接问题

Winsock -连接问题
EN

Stack Overflow用户
提问于 2010-12-09 08:17:40
回答 2查看 1.5K关注 0票数 0

我正在构建一个小程序,每天从一个网站上下载一些东西。但是每当我运行我的程序时,它都会输出"WSAConnectByName: returned with error code 10109",根据MSDN (http://msdn.microsoft.com/en-us/library/ms740668%28v=VS.85%29.aspx)上的列表,这是WSATYPE_NOT_FOUND。我真的不明白我做错了什么。有人介意找出我的错误吗?

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

发布于 2010-12-09 08:29:50

服务类型无效:这行修改后的代码适用于我。

代码语言:javascript
复制
BOOL fConnect = WSAConnectByName(Socket, const_cast<LPWSTR>(s_lpctszAddress),
   TEXT("http"), &dwSOCKADDRLen, &saAddr, NULL, NULL, NULL, NULL);

根据Microsoft docs

服务名称是端口号的字符串别名。例如,“HTTP”是端口80的别名,端口80由Internet工程任务组(IETF)定义,作为web服务器用于HTTP协议的默认端口。以下文件中列出了未指定端口号时servicename参数的可能值:

%WINDIR%\system32\drivers\etc\services

票数 3
EN

Stack Overflow用户

发布于 2010-12-09 08:24:11

您需要端口/服务名作为第三个参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4393696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档