TestDlg.cpp
上传用户:huazhu2004
上传日期:2022-06-27
资源大小:1929k
文件大小:10k
源码类别:

ICQ/即时通讯

开发平台:

Visual C++

  1.  // TestDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Test.h"
  5. #include "liaotian.h"
  6. #include "TestDlg.h"
  7. #include <afxsock.h>
  8. #include <time.h>
  9. #include <fstream.h>
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. #define ID_TIMER_SENDPROXY WM_USER
  14. #define ID_TIMER_CHAT    WM_USER
  15. static char THIS_FILE[] = __FILE__;
  16. #endif
  17. /////////////////////////////////////////////////////////////////////////////
  18. // CAboutDlg dialog used for App About
  19. class CAboutDlg : public CDialog
  20. {
  21. public:
  22. CAboutDlg();
  23. // Dialog Data
  24. //{{AFX_DATA(CAboutDlg)
  25. enum { IDD = IDD_ABOUTBOX };
  26. //}}AFX_DATA
  27. // ClassWizard generated virtual function overrides
  28. //{{AFX_VIRTUAL(CAboutDlg)
  29. protected:
  30. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  31. //}}AFX_VIRTUAL
  32. // Implementation
  33. protected:
  34. //{{AFX_MSG(CAboutDlg)
  35. //}}AFX_MSG
  36. DECLARE_MESSAGE_MAP()
  37. };
  38. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  39. {
  40. //{{AFX_DATA_INIT(CAboutDlg)
  41. //}}AFX_DATA_INIT
  42. }
  43. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  44. {
  45. CDialog::DoDataExchange(pDX);
  46. //{{AFX_DATA_MAP(CAboutDlg)
  47. //}}AFX_DATA_MAP
  48. }
  49. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  50. //{{AFX_MSG_MAP(CAboutDlg)
  51. // No message handlers
  52. //}}AFX_MSG_MAP
  53. END_MESSAGE_MAP()
  54. /////////////////////////////////////////////////////////////////////////////
  55. // CTestDlg dialog
  56. CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
  57. : CDialog(CTestDlg::IDD, pParent)
  58. {
  59. //{{AFX_DATA_INIT(CTestDlg)
  60. m_Info = _T("");
  61. m_Output = _T("");
  62. m_Input = _T("");
  63. m_Connect = _T("");
  64. m_IPAddress = _T("");
  65. m_Port = 0;
  66. m_Status = -1;
  67. m_time = _T("");
  68. m_time2 = _T("");
  69. //}}AFX_DATA_INIT
  70. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  71. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  72. }
  73. void CTestDlg::DoDataExchange(CDataExchange* pDX)
  74. {
  75. CDialog::DoDataExchange(pDX);
  76. //{{AFX_DATA_MAP(CTestDlg)
  77. DDX_Text(pDX, IDC_OUTPUTEDIT, m_Output);
  78. DDX_Text(pDX, IDC_INPUTEDIT, m_Input);
  79. DDX_Text(pDX, IDC_CONNECTEDIT, m_Connect);
  80. DDX_Text(pDX, IDC_IPADDRESS, m_IPAddress);
  81. DDV_MaxChars(pDX, m_IPAddress, 15);
  82. DDX_Text(pDX, IDC_PORT, m_Port);
  83. DDX_Radio(pDX, IDC_SERVERRADIO, m_Status);
  84. DDX_Text(pDX, IDC_TIME, m_time);
  85. DDX_Text(pDX, IDC_time2, m_time2);
  86. //}}AFX_DATA_MAP
  87. }
  88. BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
  89. //{{AFX_MSG_MAP(CTestDlg)
  90. ON_WM_SYSCOMMAND()
  91. ON_WM_PAINT()
  92. ON_WM_QUERYDRAGICON()
  93. ON_BN_CLICKED(IDC_CONNECTBUTTON, OnConnect)
  94. ON_BN_CLICKED(IDC_DISCONNECTBUTTON, OnDisconnect)
  95. ON_BN_CLICKED(IDC_SENDBUTTON, OnSend)
  96. ON_BN_CLICKED(IDC_SERVERRADIO, OnServerradio)
  97. ON_BN_CLICKED(IDC_CLIENTRADIO, OnClientradio)
  98. ON_BN_CLICKED(IDC_SENDCLEARBUTTON, OnSendclear)
  99. ON_BN_CLICKED(IDC_RECEIVECLEARBUTTON, OnReceiveclear)
  100. ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
  101. ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
  102. //}}AFX_MSG_MAP
  103. END_MESSAGE_MAP()
  104. /////////////////////////////////////////////////////////////////////////////
  105. // CTestDlg message handlers
  106. BOOL CTestDlg::OnInitDialog()
  107. {
  108. CDialog::OnInitDialog();
  109. // Add "About..." menu item to system menu.
  110. // IDM_ABOUTBOX must be in the system command range.
  111. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  112. ASSERT(IDM_ABOUTBOX < 0xF000);
  113. CMenu* pSysMenu = GetSystemMenu(FALSE);
  114. if (pSysMenu != NULL)
  115. {
  116. CString strAboutMenu;
  117. strAboutMenu.LoadString(IDS_ABOUTBOX);
  118. if (!strAboutMenu.IsEmpty())
  119. {
  120. pSysMenu->AppendMenu(MF_SEPARATOR);
  121. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  122. }
  123. }
  124.     
  125. // Set the icon for this dialog.  The framework does this automatically
  126. //  when the application's main window is not a dialog
  127. SetIcon(m_hIcon, TRUE); // Set big icon
  128. SetIcon(m_hIcon, FALSE); // Set small icon
  129.     m_Status=-1;
  130.     m_ServerSocket=NULL;
  131. m_ClientSocket=NULL;
  132. m_arIn=NULL;
  133. m_arOut=NULL;
  134.     m_file=NULL;
  135. m_Connect="";
  136. m_IPAddress="192.168.153.1";
  137. m_Port=5000;
  138. m_time="开始时间";
  139.     m_time2="结束时间"; 
  140. a=0;b=0;c=0;d=0;
  141.     GetDlgItem(IDC_IPADDRESS)->EnableWindow(FALSE);
  142. GetDlgItem(IDC_PORT)->EnableWindow(FALSE);
  143. UpdateData(FALSE);
  144. return TRUE;  // return TRUE  unless you set the focus to a control
  145. }
  146. void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
  147. {
  148. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  149. {
  150. CAboutDlg dlgAbout;
  151. dlgAbout.DoModal();
  152. }
  153. else
  154. {
  155. CDialog::OnSysCommand(nID, lParam);
  156. }
  157. }
  158. // If you add a minimize button to your dialog, you will need the code below
  159. //  to draw the icon.  For MFC applications using the document/view model,
  160. //  this is automatically done for you by the framework.
  161. void CTestDlg::OnPaint() 
  162. {
  163. if (IsIconic())
  164. {
  165. CPaintDC dc(this); // device context for painting
  166. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  167. // Center icon in client rectangle
  168. int cxIcon = GetSystemMetrics(SM_CXICON);
  169. int cyIcon = GetSystemMetrics(SM_CYICON);
  170. CRect rect;
  171. GetClientRect(&rect);
  172. int x = (rect.Width() - cxIcon + 1) / 2;
  173. int y = (rect.Height() - cyIcon + 1) / 2;
  174. // Draw the icon
  175. dc.DrawIcon(x, y, m_hIcon);
  176. }
  177. else
  178. {
  179. CDialog::OnPaint();
  180. }
  181. }
  182. // The system calls this to obtain the cursor to display while the user drags
  183. //  the minimized window.
  184. HCURSOR CTestDlg::OnQueryDragIcon()
  185. {
  186. return (HCURSOR) m_hIcon;
  187. }
  188. void CTestDlg::OnConnect() 
  189. {
  190. CString msg;
  191.     UpdateData(TRUE); 
  192. if (m_Status==0 )  //server
  193. {
  194. if  ( m_ServerSocket!=NULL) 
  195.         {
  196. m_Connect="Please disconnect!";
  197. UpdateData(FALSE);
  198. }
  199. else
  200. {
  201. m_Connect="Waiting for Client...";
  202. UpdateData(FALSE);
  203. if(!AfxSocketInit())
  204. MessageBox("WindowsSocket initial failed!","Send",MB_ICONSTOP); 
  205. return; 
  206. m_ServerSocket=new CNewSocket;
  207. m_ServerSocket->m_Status=m_Status;
  208. m_ServerSocket->GetDlg(this);  
  209. if(!m_ServerSocket->Create(m_Port)) 
  210. MessageBox("SendSocket create failed!", "Send",MB_ICONSTOP); 
  211. else
  212. m_ServerSocket->Listen();
  213. }
  214. }
  215. else 
  216. {
  217. if (m_Status==1) 
  218. {
  219. if (m_ClientSocket!=NULL)
  220. {          
  221. m_Connect="Please disconnect!";
  222. UpdateData(FALSE);
  223. }
  224. else
  225. {
  226. m_Connect="Connect to the Server...";
  227. UpdateData(FALSE);
  228. if(!AfxSocketInit())
  229. {
  230. MessageBox("WindowsSocket initial failed!", "Receive",MB_ICONSTOP); 
  231.                     return; 
  232.                 m_ClientSocket=new CNewSocket; 
  233.                 m_ClientSocket->GetDlg(this); 
  234. m_ClientSocket->m_Status=m_Status;
  235. if(!m_ClientSocket->Create())
  236. MessageBox("ReceiveSocket create failed!","Receive",MB_ICONSTOP); 
  237. return; 
  238. }
  239. else
  240. if (!m_ClientSocket->Connect(m_IPAddress,m_Port))
  241. {
  242. CString str=m_Connect;
  243. SocketReset();
  244. m_Connect=str;
  245. m_Connect+="Error!";
  246. UpdateData(FALSE);
  247. }
  248. else   
  249. {         
  250. m_Connect+="OK!";
  251. ontimer(1);
  252. m_file=new CSocketFile(m_ClientSocket); 
  253. m_arIn=new CArchive(m_file, CArchive::load); 
  254. m_arOut=new CArchive(m_file, CArchive::store); 
  255. }
  256. UpdateData(FALSE);
  257. }
  258. }
  259.  
  260. }
  261. if (m_Status==-1)
  262. msg="Please choose the status!";
  263. AfxMessageBox(msg);
  264. }
  265. }
  266. void CTestDlg::OnSend() 
  267. {
  268. if (m_arOut)
  269. {
  270. if (m_Status==0)
  271. {
  272. UpdateData(TRUE);
  273. *m_arOut<<m_Output;
  274. m_arOut->Flush();
  275. time_t t3 = time(0); 
  276.             char tmp3[64]; 
  277.             strftime( tmp3, sizeof(tmp3), "%X",localtime(&t3));
  278. fstream in("1.txt",ios::app);
  279. in<<"sever: "<<tmp3;
  280. in<<m_Output<<endl;
  281. in.close(); 
  282. }
  283. else 
  284. {
  285. UpdateData(TRUE);
  286. *m_arOut<<m_Output;
  287. m_arOut->Flush();
  288. time_t t3 = time(0); 
  289.             char tmp3[64]; 
  290.             strftime( tmp3, sizeof(tmp3), "%X",localtime(&t3)); 
  291. fstream in("1.txt",ios::app);
  292. in<<"client: "<<tmp3;
  293. in<<m_Output<<endl;
  294. in.close(); 
  295. }
  296. }
  297. else AfxMessageBox("Not connected!");
  298. }
  299. void CTestDlg::OnAccept()
  300. {
  301.     m_Connect+="OK!";
  302. ontimer(1);
  303. UpdateData(FALSE);
  304. m_ClientSocket=new CNewSocket;
  305. m_ClientSocket->GetDlg(this);
  306. m_ServerSocket->Accept(*m_ClientSocket);
  307. m_ClientSocket->m_Status=m_ServerSocket->m_Status;
  308.     m_file=new CSocketFile(m_ClientSocket); 
  309. m_arIn=new CArchive(m_file, CArchive::load); 
  310.     m_arOut=new CArchive(m_file, CArchive::store);
  311.  
  312. }
  313. void CTestDlg::OnReceive()
  314. {
  315. *m_arIn>>m_Input;   
  316. UpdateData(FALSE); 
  317. }
  318. void CTestDlg::OnDisconnect() 
  319. {
  320.     if (m_arOut!=NULL)
  321. {
  322. SocketReset();
  323. m_Connect="Disconnected!";
  324. ontimer(2);
  325. UpdateData(FALSE);
  326. c++;
  327.  
  328. }
  329. }
  330. void CTestDlg::OnClose()
  331. {
  332.     if (m_ClientSocket->m_Status==0) m_Connect="Client ";
  333. else m_Connect="Server ";
  334. m_Connect+="has disconnected!"; 
  335. ontimer(2); 
  336. UpdateData(FALSE);
  337.  
  338. }
  339. void CTestDlg::SocketReset()
  340. {
  341. if (m_arIn!=NULL) 
  342. delete m_arIn;
  343. m_arIn=NULL;
  344. }
  345. if (m_arOut!=NULL) 
  346. {
  347. delete m_arOut;
  348. m_arOut=NULL;
  349. }
  350. if (m_file!=NULL)  
  351. {
  352. delete m_file;
  353. m_file=NULL;
  354. }
  355. if (m_ClientSocket!=NULL)
  356. {
  357. delete m_ClientSocket;
  358. m_ClientSocket=NULL;
  359. }
  360. if (m_ServerSocket!=NULL)
  361. {    
  362. delete m_ServerSocket;
  363. m_ServerSocket=NULL;
  364. }
  365. m_Connect="";
  366. UpdateData(FALSE);
  367. }
  368. void CTestDlg::OnServerradio() 
  369. {
  370.     UpdateData(TRUE);
  371.     GetDlgItem(IDC_IPADDRESS)->EnableWindow(FALSE);
  372. GetDlgItem(IDC_PORT)->EnableWindow(TRUE);
  373.     UpdateData(FALSE);
  374. }
  375. void CTestDlg::OnClientradio() 
  376. {
  377.     UpdateData(TRUE);
  378.     GetDlgItem(IDC_IPADDRESS)->EnableWindow(TRUE);
  379. GetDlgItem(IDC_PORT)->EnableWindow(TRUE);
  380.     UpdateData(FALSE);
  381. }
  382. void CTestDlg::OnSendclear() 
  383. {
  384.     m_Output="";
  385.     UpdateData(FALSE);
  386. }
  387. void CTestDlg::OnReceiveclear() 
  388. {
  389. m_Input="";
  390. UpdateData(FALSE);
  391. }
  392. void CTestDlg::ontimer(int bb) 
  393. {
  394. // TODO: Add your message handler code here and/or call default
  395. //更新时间
  396. if(bb==1)
  397. {
  398. time_t t = time(0); 
  399.         char tmp[64]; 
  400.         strftime( tmp, sizeof(tmp), "%X",localtime(&t));
  401. m_time=tmp;
  402. }
  403. if(bb==2) 
  404. {
  405. time_t t2 = time(0); 
  406.         char tmp2[64]; 
  407.         strftime( tmp2, sizeof(tmp2), "%X",localtime(&t2));
  408.         m_time2=tmp2;
  409. }
  410. }
  411.          
  412. void CTestDlg::OnButton1() 
  413. {
  414. // TODO: Add your control notification handler code here
  415. fstream a("1.txt",ios::trunc);
  416. UpdateData(FALSE);
  417. }
  418. void CTestDlg::OnButton2() 
  419. {
  420. // TODO: Add your control notification handler code here
  421. Cliaotian a;
  422. a.DoModal();
  423. }