局域网通过代理服务器上网,使用Winsock下载文件的两个问题。

jishu520 2009-09-18 06:26:55
问题一:
PHOSTENT hostinfo;
if((hostinfo = gethostbyname(“www.baidu.com") == NULL)
{
return FALSE;
}

通过主机名得不到主机信息,但设置dns服务器为代理服务器的IP则可以。如果不设置DNS(即自动获取DNS),怎么得到主机信息?

问题二:
设置了dns服务器为代理服务器的IP,可以得到主机信息,但连接总是出现超时错误。

char * pszIP = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);

// 创建套接字
m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_socket == INVALID_SOCKET)
{
return FALSE;
}
SOCKADDR_IN addr;
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = inet_addr(pszIP);
addr.sin_port = htons(80);


// 连接服务器
m_nError = connect(m_socket, (SOCKADDR*)&addr, sizeof(SOCKADDR ));
if (m_nError == SOCKET_ERROR)
{
int iRet = ::GetLastError(); // 出现10060错误,超时
closesocket(m_socket);
return FALSE;
}
...全文
61 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaohongbo83 2009-09-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 coderofvc 的回复:]
引用 2 楼 zhaohongbo83 的回复:
问题1、
改 PHOSTENT *hostinfo;

gethostbyname函数参数要的是主机名,你的域名www.baidu.com不可以的。

...




gethostbyname可以传域名的。。
[/Quote]
哦,我的错,弄错了
可以传域名,但是上面的那个还是要改成PHOSTENT *hostinfo;型
CoderOfVC 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhaohongbo83 的回复:]
问题1、
改 PHOSTENT *hostinfo;

gethostbyname函数参数要的是主机名,你的域名www.baidu.com不可以的。

...


[/Quote]

gethostbyname可以传域名的。。
zhaohongbo83 2009-09-18
  • 打赏
  • 举报
回复
问题1、
改 PHOSTENT *hostinfo;

gethostbyname函数参数要的是主机名,你的域名www.baidu.com不可以的。

问题2、
char * pszIP = inet_ntoa( *((in_addr*)*hostinfo->h_addr_list));

你可以查看一下10060错误信息,是由于一段时间内没有得到正确答复或连接主机没有反应,连接尝试失败的错误。




CoderOfVC 2009-09-18
  • 打赏
  • 举报
回复
问题一:
char szHost[] = "www.baidu.com";
然后再使用gethostbyname函数,
这样试下看可不可以,

问题二:
可能是IP设置错了,可能是因为第一步没有获取到

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧