求教查询主机上的WEB服务器所用的端口
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;//WSADATA结构体中主要包含了系统所支持的Winsock版本信息
struct servent *serventp = NULL;
char hostname[]="www.baidu.com";
struct hostent *htpp = NULL;
struct in_addr addr;//
/////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////
if ( WSAStartup( MAKEWORD( 1,1 ), &wsaData ) != 0 ) //初始化Winsock 1.1
{
printf("WSAStartup:出错\n");
}
////////
///////套接字初始化必须成功地调用WSAStartup()
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
//取得本地http服务用的相关信息
///////////////////////////////////////////////////////////////////////////////////////////
if ( (serventp = getservbyname("http", NULL)) != 0 )
{
printf("正规的服务名:%s\n",serventp->s_name);
printf("连接该服务端口号:%d\n",htons(serventp->s_port));
printf("连接该服务协议名:%s\n",serventp->s_proto);
}
/////////////////////////////////////////////////////////////////////////////////////////
////网络主机的相关信息
//////////////////////////////////////////////////////////////////////////////////////////
if((htpp = gethostbyname(hostname)) != NULL)
{
printf("主机名:%s\n",htpp->h_name);
printf("主机别名:%s\n",htpp->h_aliases);
printf("主机ip地址的类型:%d\n",htpp->h_addrtype );
printf("主机ip地址的长度:%d\n",htpp->h_length);
printf("主机ip地址: %s,\n",inet_ntoa(*((struct in_addr *)htpp->h_addr)));//打印可以调用inet_ntoa()函数将其转换网络地址转换成“.”点隔的字符串格式。
}
///////////////////////////////////////////////////////////////////////////////////////////
//这里求教我要查询主机上的WEB服务器所用的端口
//但是Windows Sockets API没有支持C版查询端口的函数
//只有异步WSAAsyncGetServByName()函数,这函数如何用纯C来实现查询主机端口。
//新手第一次发贴
/////////////////////////////////////////////////////////////////////////////////////////
WSACleanup( );
return 0;
} C
[解决办法]
第一个参数 HWND hWnd 是一个Window(窗口)的句柄。
当WSAAsyncGetServByName 异步请求完成后,系统会向这个窗口发送通知消息。
Window可以用Win32 API CreateWindow/CreateWindowEx 来创建,也可以用MFC来创建。创建过程比较复杂,LZ需要查看很多资料。
[解决办法]
HWND hWndSock;
if (!(hWndSock = CreateWindow("STATIC", "MY-TEST", WS_OVERLAPPED,
0, 0, 0, 0,
HWND_MESSAGE, NULL,
NULL, NULL)))
return FALSE;