是否要用多线程,
是否一个Socket发,一个Socket收,
是否可以ping指定端口IP地址组方已存放在
CString addr[255];
ss = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);?//用哪个协议
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(8989);
servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
if(::connect(ss, (sockaddr*)&servAddr, sizeof(servAddr)) == -1)
能否用此种方法PING。此种方法我已经掌握。
主要不明白的就是,对方没有SOCKET在了listen,这边的SOCKET如何才connect并判断对方主机是否开机.
求教,万分感谢
是否一个Socket发,一个Socket收,
是否可以ping指定端口IP地址组方已存放在
CString addr[255];
ss = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);?//用哪个协议
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(8989);
servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
if(::connect(ss, (sockaddr*)&servAddr, sizeof(servAddr)) == -1)
能否用此种方法PING。此种方法我已经掌握。
主要不明白的就是,对方没有SOCKET在了listen,这边的SOCKET如何才connect并判断对方主机是否开机.
求教,万分感谢
void CTestDlg::FindAllComputer(CStringArray& MyList)
{
MyList.RemoveAll();
CString StrTemp;
struct hostent *host;
struct in_addr *ptr;
DWORD dwScope = RESOURCE_CONTEXT;
NETRESOURCE *NetResource = NULL;
HANDLE hEnum;
WNetOpenEnum( dwScope, NULL, NULL, NULL, &hEnum );
WSADATA wsaData;
//开始搜索网络资源
WSAStartup(MAKEWORD(1,1),&wsaData);
//如果句柄有效
if ( hEnum )
{
DWORD Count = 0xFFFFFFFF;
DWORD BufferSize = 2048;
LPVOID Buffer = new char[2048];
//调用WSAStartup后调用WNetEnumResource做进一步的搜索工作
WNetEnumResource( hEnum, &Count, Buffer, &BufferSize );
NetResource = (NETRESOURCE*)Buffer;
char StrHostName[200];
for ( unsigned int i = 0; i < BufferSize/sizeof(NETRESOURCE); i++, NetResource++ )
{
if ( NetResource->dwUsage == RESOURCEUSAGE_CONTAINER && NetResource->dwType == RESOURCETYPE_ANY ) {
if ( NetResource->lpRemoteName )
{
CString strFullName = NetResource->lpRemoteName;
if ( 0 == strFullName.Left(2).Compare("\\\\") )
strFullName = strFullName.Right(strFullName.GetLength()-2);
//获得主机名
gethostname( StrHostName, strlen( StrHostName ) );
//由主机名获得跟它对应的主机信息
host = gethostbyname(strFullName);
if(host == NULL) continue;
ptr = (struct in_addr *) host->h_addr_list[0];
// 提取IP地址信息,地址形式如下: 211.40.35.76
int a = ptr->S_un.S_un_b.s_b1; // 211
int b = ptr->S_un.S_un_b.s_b2; // 40
int c = ptr->S_un.S_un_b.s_b3; // 35
int d = ptr->S_un.S_un_b.s_b4; // 76
StrTemp.Format("%s : %d.%d.%d.%d",strFullName,a,b,c,d);
// 加入到链表中
MyList.Add(StrTemp);
}
}
}
delete Buffer;
// 结束搜索工作
WNetCloseEnum( hEnum );
}
// 卸载Winsock.dll
WSACleanup();
}
// SendARP.cpp文件#include <windows.h>
#include <stdio.h>#include <Iphlpapi.h>
#pragma comment(lib, "Iphlpapi.lib")
#pragma comment(lib, "WS2_32.lib")
void main()
{
char szDestIP[] = "192.168.0.151"; // 发送ARP请求
u_char arDestMac[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
ULONG ulLen = 6;
if(::SendARP(::inet_addr(szDestIP), 0, (ULONG*)arDestMac, &ulLen) == NO_ERROR)
{
// 已开机 则打印出结果
u_char *p = arDestMac;
printf(" pEtherh->shost: %02X-%02X-%02X-%02X-%02X-%02X \n", p[0], p[1], p[2], p[3], p[4], p[5]);
}
}