⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pagepeople.cpp

📁 网络管理器源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
  CString sIpAddress;
  unsigned long ulIpAddress = 0x0;

  hostent* phe;
  char abHostName[255];

  if((!gethostname(abHostName, sizeof(abHostName)))  &&
     ((phe = gethostbyname(abHostName)) != NULL) &&
     (phe->h_length == 4))
  {
    CopyMemory(&ulIpAddress, phe->h_addr, 4);

    ulIpAddress &= 0x00ffffff;

    CString sIP;
    for(int i = 0; i < 255; i++)
	  {
		  if(phe = gethostbyaddr((LPCSTR)&ulIpAddress, 4, PF_INET))
      {
        pOwner->ItemInsert(phe->h_name);

        in_addr inaddr;
        inaddr.s_addr = ulIpAddress;
        CString sIpAddress = inet_ntoa(inaddr);
      }
      ulIpAddress += 0x01000000;
    }
  }

  g_AnimateWait->Play(0, 0, 0);
  g_WriteToOutput(TRUE, "[People] Looking up hostnames finished...");

  return 0;
}

/////////////////////////////////////////////////////////////////////////////

void CPagePeople::OnLocalNet() 
{
  AfxBeginThread(g_LocalNet, this);
  g_WriteToOutput(TRUE, "[People] Looking up hostnames, please wait...");
}

/////////////////////////////////////////////////////////////////////////////

BOOL CPagePeople::PreTranslateMessage(MSG* pMsg) 
{
  if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
  {
    switch(GetFocus()->GetDlgCtrlID())
    {
      case IDC_FINGERSERVER:
        AddServer();
        break;
      case IDC_FINGERUSER:
        AddUser();
        break;
      case IDC_MINUTES:
        m_Every.SetFocus();
        break;
    }
  }

	return CPropertyPage::PreTranslateMessage(pMsg);
}

/////////////////////////////////////////////////////////////////////////////

void CPagePeople::OnChangeFingerserver() 
{
  UpdateData();

  CString sServer;
  m_Server.GetWindowText(sServer);
  CString sUser;
  m_User.GetWindowText(sUser);

  if(sServer != "")
  	GetDlgItem(IDB_FINGER)->EnableWindow(TRUE);
  else
  	GetDlgItem(IDB_FINGER)->EnableWindow(FALSE);

  if(sServer != "" && sUser != "")
  	GetDlgItem(IDB_FINGER_MANUAL)->EnableWindow(TRUE);
  else
  	GetDlgItem(IDB_FINGER_MANUAL)->EnableWindow(FALSE);
}

/////////////////////////////////////////////////////////////////////////////

void CPagePeople::OnChangeFingeruser() 
{
  UpdateData();

  CString sServer;
  m_Server.GetWindowText(sServer);
  CString sUser;
  m_User.GetWindowText(sUser);
  if(sUser != "" && sServer != "")
  	GetDlgItem(IDB_FINGER_MANUAL)->EnableWindow(TRUE);
  else
  	GetDlgItem(IDB_FINGER_MANUAL)->EnableWindow(FALSE);
}

///////////////////////////////////////////////////////////////////////////////
// GetHostAddr -- gets host's internet address. Interprets argument first    //
// as dotted internet address string, and failing that, as a DNS host name.  //
///////////////////////////////////////////////////////////////////////////////

IPA g_GetHostAddr(char* szHostName)
{
  IPA ipa;
  HOSTENT FAR *phe; // pts to host info struct (internally allocated)

  if((ipa = INET_ADDR(szHostName)) != INADDR_NONE)
    return ipa;

  if(phe = gethostbyname(szHostName))
  {
    ipa = *(IPA FAR*)*(phe->h_addr_list);
    return ipa;
  }
  return INADDR_NONE;
}

///////////////////////////////////////////////////////////////////////////////
// Finger -- queries remote finger server for list of users currently        //
// logged in. We start by resolving the finger tcp service                   //
// to a port number, and then we resolve the host specifier to an IP address.//
// Finger then establishes the connection, submits query, and retrieves      //
// results.                                                                  //
///////////////////////////////////////////////////////////////////////////////

bool g_Finger(CString sHost, CString sUser, CString& sFingerOutput)
{
  g_AnimateWait->Play(0, -1, -1);           // start animation

  bool bFingerRet = true;                   // assume success
  SERVENT FAR *pse;                         // pts to "service" data (internally allocated)

  char szHostName[40];
  char szUserName[40];

  strcpy(szHostName, sHost);
  strcpy(szUserName, sUser);

  if(pse = getservbyname("finger", NULL))   // looking for finger tcp port
  {
    UINT FingerPort;	                      // hold the data returned by getservbyname
                                            // because the standard says you *must* copy this
                                            // data out before calling any winsock API function
    IPA ipa;                                // holds internet protocol address

    FingerPort = pse->s_port;

    if((ipa = g_GetHostAddr((szHostName))) != INADDR_NONE)
    {
      SOCKET strFingerSocket;               // communications end point

      if((strFingerSocket = socket(AF_INET, SOCK_STREAM, 0)) >= 0)
      {
        SOCKADDR_IN strFingerServer;
        memset(&strFingerServer, 0, sizeof(strFingerServer));   // address of the finger server
        strFingerServer.sin_family = AF_INET;
        strFingerServer.sin_port = FingerPort;
        strFingerServer.sin_addr.s_addr = ipa;

        // establish a stream connection to server
        if(!connect(strFingerSocket, (SOCKADDR *)&strFingerServer, sizeof(strFingerServer)))
        {
          char msg[40 + 3];
          int msglen;

          strcpy(msg, szUserName);
          strcat(msg, "\r\n");
          msglen = strlen(msg);

          if(send(strFingerSocket, msg, msglen, 0) == msglen)
          {
            static char buf[500];               // receive buffer
            int nchars;                         // n chars just received, or error

            while((nchars = recv(strFingerSocket, (char FAR *)&buf, sizeof(buf), 0)) > 0)
            {
              *(buf + nchars) = 0;
              sFingerOutput += buf;
            }

            if (nchars < 0)
            {
              sFingerOutput = "[People] Finger Error (error during receive) - " + sHost;  //FE_NORECV
              bFingerRet = false;
            }
          }
          else
          {
            sFingerOutput = "[People] Finger Error (didn't send it (all) - " + sHost;     //FE_NOSEND
            bFingerRet = false;
          }
        }
        else
        {
          sFingerOutput = "[People] Finger Error (cannot connect to server) - " + sHost;  //FE_NOCONN
          closesocket(strFingerSocket);
          bFingerRet = false;
        }
      }
      else
      {
        sFingerOutput = "[People] Finger Error (cannot get socket) - " + sHost;           //FE_NOSOCK
        bFingerRet = false;
      }
    }
    else
    {
      sFingerOutput = "[People] Finger Error (don't recognize host name) - " + sHost;     //FE_NOHOST 
      bFingerRet = false;
    }
  }
  else
  {
    sFingerOutput = "[People] Finger Error (can't find port) - " + sHost;          //FE_NOPORT
    bFingerRet = false;
  }
  g_AnimateWait->Play(0, 0, 0);

  return (bFingerRet);
}

/////////////////////////////////////////////////////////////////////////////

UINT g_FingerThread(LPVOID pParam)
{
  CString sHost = ((CStringArray*)pParam)->GetAt(0);
  CString sUser = ((CStringArray*)pParam)->GetAt(1);
  ((CStringArray*)pParam)->RemoveAll();
  delete ((CStringArray*)pParam);

  CString sOutput;
  g_AnimateWait->Play(0, -1, -1);           // start animation

  SERVENT FAR *pse;                         // pts to "service" data (internally allocated)
  char szHostName[40];
  char szUserName[40];

  strcpy(szHostName, sHost);
  strcpy(szUserName, sUser);

  if(pse = getservbyname("finger", NULL))   // looking for finger tcp port
  {
    UINT FingerPort;	                      // hold the data returned by getservbyname
                                            // because the standard says you *must* copy this
                                            // data out before calling any winsock API function
    IPA ipa;                                // holds internet protocol address

    FingerPort = pse->s_port;

    if((ipa = g_GetHostAddr((szHostName))) != INADDR_NONE)
    {
      SOCKET strFingerSocket;               // communications end point

      if((strFingerSocket = socket(AF_INET, SOCK_STREAM, 0)) >= 0)
      {
        SOCKADDR_IN strFingerServer;
        memset(&strFingerServer, 0, sizeof(strFingerServer));   // address of the finger server
        strFingerServer.sin_family = AF_INET;
        strFingerServer.sin_port = FingerPort;
        strFingerServer.sin_addr.s_addr = ipa;

        // establish a stream connection to server
        if(!connect(strFingerSocket, (SOCKADDR *)&strFingerServer, sizeof(strFingerServer)))
        {
          char msg[40 + 3];
          int msglen;

          strcpy(msg, szUserName);
          strcat(msg, "\r\n");
          msglen = strlen(msg);

          if(send(strFingerSocket, msg, msglen, 0) == msglen)
          {
            static char buf[500];               // receive buffer
            int nchars;                         // n chars just received, or error

            while((nchars = recv(strFingerSocket, (char FAR *)&buf, sizeof(buf), 0)) > 0)
            {
              *(buf + nchars) = 0;
              sOutput += buf;
            }

            if (nchars < 0)
              sOutput = "[People] Finger Error (error during receive) - " + sHost;  //FE_NORECV
          }
          else
            sOutput = "[People] Finger Error (didn't send it (all) - " + sHost;     //FE_NOSEND
        }
        else
        {
          sOutput = "[People] Finger Error (cannot connect to server) - " + sHost;  //FE_NOCONN
          closesocket(strFingerSocket);
        }
      }
      else
        sOutput = "[People] Finger Error (cannot get socket) - " + sHost;           //FE_NOSOCK
    }
    else
      sOutput = "[People] Finger Error (don't recognize host name) - " + sHost;     //FE_NOHOST 
  }
  else
    sOutput = "[People] Finger Error (can't find port) - " + sHost;                 //FE_NOPORT

  g_AnimateWait->Play(0, 0, 0);

  CString sOutputText = g_MakeWindowsTextLines(sOutput);
  g_WriteToOutput(TRUE, sOutputText);

  return 0;
}

/////////////////////////////////////////////////////////////////////////////

void CPagePeople::OnFinger() 
{
  UpdateData();

  CStringArray* pasFinger = new CStringArray;
  pasFinger->Add(m_sServer);
  pasFinger->Add(m_sUser);
  AfxBeginThread(g_FingerThread, pasFinger);
}

/////////////////////////////////////////////////////////////////////////////

void CPagePeople::OnFingerCurrent() 
{
  bool bManual = false;
  HTREEITEM hParentItem;
  HTREEITEM hCurrItem = m_ServerTree.GetSelectedItem();
  if(hCurrItem)
  {
    CString sServer;
    CString sUser;
    sUser = m_ServerTree.GetItemText(hCurrItem);

    if(hParentItem = m_ServerTree.GetParentItem(hCurrItem))
    {
      sServer = m_ServerTree.GetItemText(hParentItem);
      if((m_ServerTree.GetItemState(hParentItem, TVIS_STATEIMAGEMASK) & TVIS_STATEIMAGEMASK) == INDEXTOSTATEIMAGEMASK(ICON_MANUAL))
        bManual = true;
    }  
    else
    {
      sServer = sUser;
      sUser = "";
    }

    if(bManual)
      FingerManual(sServer, sUser);       // manual finger
    else
    {
      CStringArray* pasFinger = new CStringArray;
      pasFinger->Add(sServer);
      pasFinger->Add(sUser);
      AfxBeginThread(g_FingerThread, pasFinger);
    }
  }
  else
    AfxMessageBox("Nothing selected");	
}

/////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -