西安工程大学学士学位论文
}
itor != CClientSocket::m_listClient.end();itor++) { CClientSocket *pSocket = *itor; if (!pSocket->GetUID().Compare(pPack->senderID)) { NET_PACK pack; memset(&pack,0,sizeof(NET_PACK)); pack.fun = ERR; lstrcpy(pack.Connect,_T(\传送出错!\ pSocket->Send(&pack,sizeof(NET_PACK)); } }
(4) 客户端收到服务器成传送的传输错误提醒
void CDlgTCPClientDlg::DealError(const char *Connect) {
AfxMessageBox(Connect); }
6.2 服务器端工程设计
6.2.1新建工程
新建服务器端控制下程序.单击【File】|【New】菜单项,在新建对话框中选择MFCAppWizard[exe]选项,输入工程名“DlgTCPSever”。如图
17
西安工程大学学士学位论文
建立基于对话框的应用程序。在【MFC AppWizard-Step 1】对话框中,选择【Diaog based】单选按钮,如图:
为工程添加WinSock支持。在上图中单击【Next】按钮后进入【MFC AppWizard-step2 of 4】对话框,在其中选择复选框【Windows Sockets】后单击【finish】按钮完成向导,如图:
设计服务器对话框界面。在新建的工程中打开工作台中的【resource View】选项,单击【dialog】选项,打开对话框编辑器,拖动控件,设计对话框界面,如图: 添加前:
18
西安工程大学学士学位论文
设置控件属性
完成后:
添加消息处理代码。在MFC ClassWizard 工具剧中为上图中的控件添加消息处理事件,在其中输入代码。
19
西安工程大学学士学位论文
6.2.2 服务器窗口相关代码
(1)对话框初始化:
void CDlgTCPSeverDlg::IniCtruls() { B);
m_lsInfo.InsertColumn(0,_T(\序号\m_lsInfo.InsertColumn(1,_T(\用户名\m_lsInfo.InsertColumn(2,_T(\时间\m_lsInfo.InsertColumn(3,_T(\事件\m_btnStop.EnableWindow(FALSE); CString strTitle;
strTitle.Format(_T(\服务器未开启\SetWindowText(strTitle);
//-------------------------------------------------------------------------------------
m_lsInfo.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_FLATS
}
(2)“登陆”控件代码设计:
void CDlgTCPSeverDlg::OnBtnStart() { // TODO: Add your control notification handler code here // UpdateData(TRUE); if (!m_ListenSocket.Create(m_nPort,SOCK_STREAM,m_strIP)) { AfxMessageBox(_T(\创建失败!\
20
西安工程大学学士学位论文
return; } if (!m_ListenSocket.Listen()) { AfxMessageBox(_T(\监听失败!\ m_ListenSocket.Close(); return; } //------------------------------------------------------------------------------------- CString strTitle; strTitle.Format(_T(\服务器已开启----当前在线人数(0)\ SetWindowText(strTitle); m_btnStart.EnableWindow(FALSE); m_btnStop.EnableWindow(TRUE); InSertLog(_T(\服务器\登录\} (3)“停止”控件代码设计:
vovoid CDlgTCPSeverDlg::OnBtnStop() {
// TODO: Add your control notification handler code here
CString strTitle; MessageBox(\退出程序\
strTitle.Format(_T(\服务器未开启\SetWindowText(strTitle);
m_btnStart.EnableWindow(TRUE); m_btnStop.EnableWindow(FALSE); ClearClientList();
InSertLog(_T(\服务器\退出\m_ListenSocket.ShutDown(2); m_ListenSocket.Close(); }
(4)服务器端情况记录代码:
void CDlgTCPSeverDlg::InSertLog(CString strUser, CString strEvent) { int n = m_lsInfo.GetItemCount(); CString strTemp; strTemp.Format(_T(\
21