基于TCP的网络通信协议设计毕业论文 下载本文

内容发布更新时间 : 2024/5/6 7:02:11星期一 下面是文章的全部内容请认真阅读。

西安工程大学学士学位论文

}

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