AdduserDlg.cpp
上传用户:sdxhgc
上传日期:2013-09-14
资源大小:388k
文件大小:6k
源码类别:

通讯编程

开发平台:

Visual C++

  1. // AdduserDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "vc_demo.h"
  5. #include "AdduserDlg.h"
  6. #include "MainFrm.h"
  7. #include <winsock2.h>
  8. #include "wcomm_dll.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CAdduserDlg dialog
  16. CAdduserDlg::CAdduserDlg(CWnd* pParent /*=NULL*/)
  17. : CDialog(CAdduserDlg::IDD, pParent)
  18. {
  19. //{{AFX_DATA_INIT(CAdduserDlg)
  20. // NOTE: the ClassWizard will add member initialization here
  21. //}}AFX_DATA_INIT
  22. }
  23. void CAdduserDlg::DoDataExchange(CDataExchange* pDX)
  24. {
  25. CDialog::DoDataExchange(pDX);
  26. //{{AFX_DATA_MAP(CAdduserDlg)
  27. DDX_Control(pDX, IDC_DATETIMEPICKER1, m_date);
  28. DDX_Control(pDX, IDC_COMBO3, m_dscport);
  29. DDX_Control(pDX, IDC_COMBO2, m_dtuport);
  30. DDX_Control(pDX, IDC_COMBO1, m_status);
  31. DDX_Control(pDX, IDC_IPADDRESS2, m_dscip);
  32. DDX_Control(pDX, IDC_IPADDRESS1, m_dtuip);
  33. DDX_Control(pDX, IDC_EDIT1, m_userid);
  34. //}}AFX_DATA_MAP
  35. }
  36. BEGIN_MESSAGE_MAP(CAdduserDlg, CDialog)
  37. //{{AFX_MSG_MAP(CAdduserDlg)
  38. ON_BN_CLICKED(IDOK, OnAddUserB)
  39. //}}AFX_MSG_MAP
  40. END_MESSAGE_MAP()
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CAdduserDlg message handlers
  43. BOOL CAdduserDlg::OnInitDialog() 
  44. {
  45. CDialog::OnInitDialog();
  46. // TODO: Add extra initialization here
  47. HICON hIcon=LoadIcon (AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_AddUser));
  48. SetIcon(hIcon,TRUE);
  49. //初始化登录时间控件
  50. CTime stime=CTime::GetCurrentTime (); 
  51. CTime etime( 2030, 12, 31, 23, 59, 59 ); 
  52. m_date.SetFormat("yyyy/MM/dd HH:mm:ss");
  53. m_date.SetRange(&stime,&etime);
  54. m_date.SetTime(&stime);
  55. //初始化端口与在线状态控件
  56. m_dtuport.SetWindowText ("5001");
  57. m_dscport.SetWindowText ("5002");
  58. m_status.SelectString (1,"在线");
  59. //初始化IP地址控件
  60. CString str1;
  61. str1=GetLocalIP();
  62. m_dtuip.SetWindowText (str1);
  63. m_dscip.SetWindowText (str1);
  64. return TRUE;  // return TRUE unless you set the focus to a control
  65.               // EXCEPTION: OCX Property Pages should return FALSE
  66. }
  67. void CAdduserDlg::PostNcDestroy() 
  68. {
  69. // TODO: Add your specialized code here and/or call the base class
  70.     delete this;
  71. }
  72. void CAdduserDlg::OnCancel() 
  73. {
  74. // TODO: Add extra cleanup here
  75. CMainFrame* pFram=(CMainFrame*)AfxGetMainWnd ();
  76.     pFram->m_IsAdduserDlg =FALSE;
  77. CDialog::OnCancel();
  78. }
  79. CString CAdduserDlg::GetLocalIP()
  80. {
  81. char szHostname[100]; 
  82.     CString str1="",str2;
  83. struct hostent *pHostEnt;
  84. memset(szHostname,0,100);
  85. if( gethostname (szHostname, sizeof( szHostname ))!=SOCKET_ERROR) 
  86. //取本机的名称成功后,再根据名字取IP地址
  87.   pHostEnt = gethostbyname(szHostname); 
  88.       if ( pHostEnt != NULL ) 
  89.   { 
  90.   for(int i=0 ; pHostEnt->h_addr_list[i]!=NULL ; i++)
  91.   {
  92.   //转换IP地址为"xxx.xxx.xxx.xxx"形式的IP地址字符串
  93. for(int j=0 ; j<pHostEnt->h_length ; j++)
  94. {
  95. if( j>0 )
  96. {
  97. str1+=".";
  98. }//end if
  99. str2.Format ("%u",
  100. (unsigned int)((unsigned char*)pHostEnt->h_addr_list[i])[j]);
  101. str1+=str2;
  102. }//end for
  103.   }//end for
  104.   return str1;            
  105.   } 
  106.   else
  107.   {
  108.   //取不到本机的IP地址,返回空字符串
  109.   return str1;  
  110.   }//end if
  111. else
  112. {
  113. //取不到本机的名字,返回空字符串
  114. return str1;
  115. }//end if
  116. }
  117. void CAdduserDlg::IPHightToLower(const char *IPstr, char *ipaddrstr)
  118. {
  119. CString iparry[4];
  120. int i;
  121. int m=0,n;
  122. CString ipaddr;
  123.     
  124. iparry[m].Empty ();
  125. ipaddr.Empty ();
  126. n=strlen(IPstr);
  127.     for(i=0; i<n; ++i)
  128. {
  129.         if(*IPstr == '.')
  130. {
  131. ++m;
  132. iparry[m].Empty ();
  133. }
  134. else
  135. {
  136. iparry[m] += *IPstr;
  137. }
  138. IPstr++;
  139. }
  140. ipaddr=iparry[3];
  141. ipaddr+='.';
  142. ipaddr+=iparry[2];
  143. ipaddr+='.';
  144. ipaddr+=iparry[1];
  145. ipaddr+='.';
  146. ipaddr+=iparry[0];
  147.     strcpy(ipaddrstr,(LPSTR)(LPCTSTR)ipaddr);
  148. return ;
  149. }
  150. void CAdduserDlg::OnAddUserB() 
  151. {
  152. // TODO: Add your control notification handler code here
  153. int j;
  154. int count,i;
  155.     user_info userinfo;
  156. CString userid,logondate;
  157. char dscip[17];
  158. char dtuip[17];
  159. char *iptmp;
  160. char port[10];
  161. char a[3];
  162. VARIANT sinaddr,localaddr;
  163. short sinport,localport;
  164. CString str1[7];
  165. char puserid[12];
  166. CMainFrame* pFram=(CMainFrame*)AfxGetMainWnd ();   //取主框架的句柄
  167. memset(puserid,0,12);
  168. userid.Empty ();
  169. m_userid.GetWindowText (userid);
  170. if((!userid.IsEmpty ()) && (userid.GetLength ()==11))   //检查用户ID的有效性规则
  171. {
  172. //检查通过,则赋值
  173.         memset(userinfo.m_userid ,0 ,12);
  174. memcpy(userinfo.m_userid ,(LPSTR)(LPCTSTR)userid ,userid.GetLength ());
  175. iptmp=new char[17];
  176. memset(dscip,0,17);
  177. memset(dtuip,0,17);
  178. memset(iptmp,0,17);
  179. memset(port,0,10);
  180. //给sinaddr赋值
  181. m_dscip.GetWindowText (dscip,17);
  182. IPHightToLower(dscip, iptmp);  //IP地址高低位反向
  183. userinfo.m_sin_addr  =inet_addr(iptmp);//将字符串形式的IP地址转为unsigned long类型
  184. //给localaddr赋值
  185. m_dtuip.GetWindowText (dtuip,17);
  186. IPHightToLower(dtuip, iptmp);
  187. userinfo.m_local_addr  =inet_addr(iptmp);
  188. //给sinport赋值
  189. m_dscport.GetWindowText (port,10);
  190. userinfo.m_sin_port =atoi(port);
  191. //给localport赋值
  192. memset(port,0,10);
  193. m_dtuport.GetWindowText (port,10);
  194. userinfo.m_local_port =atoi(port);
  195. //给logondate赋值
  196. logondate.Empty ();
  197. m_date.GetWindowText (logondate);
  198.         memset(userinfo.m_logon_date ,0,20);
  199. memcpy(userinfo.m_logon_date ,(LPSTR)(LPCTSTR)logondate,logondate.GetLength ());
  200. //取在线状态
  201. userinfo.m_status =m_status.GetCurSel();
  202. //调用控件添加用户接口
  203. i=AddOneUser(&userinfo);
  204. pFram->RefreshUserTable (0);
  205. UpdateData (FALSE);
  206. delete []iptmp;
  207. }
  208. else
  209. {
  210. //检查失败,给出告警提示
  211. AfxMessageBox ("用户ID不能为空或输入长度不正确!",0,0);
  212. }
  213. }