Windows网络编程课程设计Word格式文档下载.docx
《Windows网络编程课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Windows网络编程课程设计Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
//Overrides
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CPortSetDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//Generatedmessagemapfunctions
//{{AFX_MSG(CPortSetDlg)
//NOTE:
theClassWizardwilladdmemberfunctionshere
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
服务器端口设置好后,系统就会自动弹出一个对话框提示“服务器端口设置ok!
”,点“确定"
后,就会进入服务器端主界面。
主界面主要有有个输入框,及4个功能模块:
(1)设置端口功能模块,主要是用于设置服务器端口号,主要代码如下:
voidCBCServerDlg:
:
OnPortSet()
//TODO:
Addyourcontrolnotificationhandlercodehere
CPortSetDlgdlg;
if(dlg。
DoModal()==IDOK)
{
m_pSocket=newCListenSocket;
if(m_pSocket—>
Create(dlg。
m_PortSet))
{
if(!
m_pSocket—>
Listen())
MessageBox(”服务器端口设置错误!
"
,"
服务器端口设置”);
else
MessageBox(”服务器端口设置ok!
”,”服务器端口设置"
);
}
}
}
(2)发送消息功能模块主要代码:
OnOK()
{
Addextravalidationhere
if(!
m_SocketList.IsEmpty())
UpdateData();
POSITIONpos;
CClientSocket*pSocket=(CClientSocket*)m_SocketList。
GetHead();
for(pos=m_SocketList.GetHeadPosition();
pos!
=NULL;
)
{
pSocket=(CClientSocket*)m_SocketList.GetNext(pos);
pSocket—>
Send(LPCTSTR(m_OutInfo),m_OutInfo。
GetLength());
}
}
elseMessageBox(”不能建立服务器连接,不能广播信息"
"
错误提示对话框"
//CDialog:
:
OnOK();
}
(3)清除消息功能模块主要代码:
OnClearOut()
m_OutInfo.Empty();
UpdateData(false);
(4)关闭服务器功能模块主要代码:
voidCBCServerDlg:
OnCancel()
//TODO:
Addextracleanuphere
if(m_pSocket)
{deletem_pSocket;
m_SocketList.RemoveAll();
CDialog:
OnCancel();
CDialog:
其中有个与用户连接是否成功的判断提示代码为:
m_SocketList。
IsEmpty())
{
UpdateData();
POSITIONpos;
CClientSocket*pSocket=(CClientSocket*)m_SocketList.GetHead();
for(pos=m_SocketList。
GetHeadPosition();
pSocket=(CClientSocket*)m_SocketList。
GetNext(pos);
pSocket—〉Send(LPCTSTR(m_OutInfo),m_OutInfo.GetLength());
elseMessageBox(”不能建立服务器连接,不能广播信息”,”错误提示对话框”);
OnOK();
voidCClientSocket:
OnReceive(intnErrorCode)
Addyourspecializedcodehereand/orcallthebaseclass
((CBCServerDlg*)(AfxGetApp()-〉m_pMainWnd))->
GetSocketMsg(this);
CSocket:
OnReceive(nErrorCode);
classCBCServerDlg:
public:
CBCServerDlg(CWnd*pParent=NULL);
voidGetSocketMsg(CClientSocket*pSocket);
CPtrListm_SocketList;
CListenSocket*m_pSocket;
//DialogData
//{{AFX_DATA(CBCServerDlg)
enum{IDD=IDD_BCServer_DIALOG};
CStringm_OutInfo;
//}}AFX_DATA
//{{AFX_VIRTUAL(CBCServerDlg)
protected:
protected:
HICONm_hIcon;
//{{AFX_MSG(CBCServerDlg)
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
afx_msgvoidOnPortSet();
//afx_msgvoidOnClearIn();
afx_msgvoidOnClearOut();
virtualvoidOnCancel();
virtualvoidOnOK();
//}}AFX_MSG
};
程序运行开始时,先初始化服务器端程序主要代码是:
BOOLCBCServerDlg:
OnInitDialog()
OnInitDialog();
//Add"
About。
menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange。
ASSERT((IDM_ABOUTBOX&
0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<
0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
pSysMenu->
AppendMenu(MF_SEPARATOR);
AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
//Settheiconforthisdialog。
Theframeworkdoesthisautomatically
//whentheapplication’smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);
//Setbigicon
SetIcon(m_hIcon,FALSE);
//Setsmallicon
Addextrainitializationhere
OnPortSet();
returnTRUE;
//returnTRUEunlessyousetthefocustoacontrol
OnSysCommand(UINTnID,LPARAMlParam)
if((nID&0xFFF0)==IDM_ABOUTBOX)
CAboutDlgdlgAbout;
dlgAbout.DoModal();
else
CDialog:
OnSysCommand(nID,lParam);
classCClientUseSocket:
publicCSocket
//Attributes
//Operations
CClientUseSocket();
virtual~CClientUseSocket();
//{{AFX_VIRTUAL(CClientUseSocket)
public:
virtualvoidOnReceive(intnErrorCode);
//}}AFX_VIRTUAL
//{{AFX_MSG(CClientUseSocket)
//NOTE-theClassWizardwilladdandremovememberfunctionshere。
//}}AFX_MSG
};
用户端程序主要有2个功能模块。
(1)连接服务器,点击后,会弹出一个输入服务器IP地址,和服务器端号.主要代码为:
voidCUseSocketDlg:
OnConnect()
CConnectDlgdlg;
if(dlg.DoModal()==IDOK)
m_ServerName=dlg.m_ServerName;
m_PortAddress=dlg.m_PortAddress;
m_pSocket=newCClientUseSocket();
if(!
(ConnectServer(m_pSocket)))
m_pSocket=NULL;
return;
MessageBox("
Socket连接成功!
”,"
userprogram"
);
OnDisconnect()
deletem_pSocket;
Socket连接已经断开”,”提示"
else
当前未连接到任何服务器!
”提示"
voidCUseSocketDlg:
OnConceal()
deletem_pSocket;
classCUseSocketApp:
publicCWinApp
CUseSocketApp();
//{{AFX_VIRTUAL(CUseSocketApp)
public:
virtualBOOLInitInstance();
//{{AFX_MSG(CUseSocketApp)
//DONOTEDITwhatyouseeintheseblocksofgeneratedcode!
//}}AFX_MSG
GetSocketMsg(CClientUseSocket*pSocket)
BOOLMsgEnd=false;
CStringMsg=”收到服务器消息:
”;
charMsgBuf[100];
intbufsize=100;
do
strcpy(MsgBuf,"
intleft=pSocket->
Receive(MsgBuf,bufsize);
if(left<
100&&
left>
0)
MsgEnd=true;
MsgBuf[left]=0;
Msg+=MsgBuf;
while(!
MsgEnd);
MessageBox(Msg,”userprogram"
BOOLCUseSocketDlg:
ConnectServer(CClientUseSocket*pSocket)
(pSocket->
Create()))
deletepSocket;
pSocket=NULL;
MessageBox(”socket创建不成功"
提示”);
returnfalse;
(pSocket—〉Connect(m_ServerName,m_PortAddress)))
deletepSocket;
pSocket=NULL;
MessageBox(”服务器连接失败”,"
提示”);
returntrue;
(2)用户端程序另一个功能模块是断开连接,主要代码是:
m_pSocket=NULL;
Socket连接已经断开”,"
MessageBox(”当前未连接到任何服务器!
”,”提示”);
classCConnectDlg:
CConnectDlg(CWnd*pParent=NULL);
//{{AFX_DATA(CConnectDlg)
enum{IDD=IDD_DIALOG1};
UINTm_PortAddress;
CStringm_ServerName;
//}}AFX_DATA
//{{AFX_VIRTUAL(CConnectDlg)
virtualvoidDoDataExchange(CDataExchange*pDX);
//}}AFX_VIRTUAL
//{{AFX_MSG(CConnectDlg)
//NOTE:
5。
调试与测试
(1)运行服务器端程序,就会弹出“端口设置对话框”如下图:
(2)点“确定”后,就会弹出提示对话框,如截图:
(3)点这个对话框的“确定"
后,就进入服务器端主界面,如截图:
(4)设置端口对话框用于设置服务器端口,“发送"
功能用于服务器向全部客户发送信息,如截图:
这时运行客户端就会收到服务器发来的消息,如截图:
(5)如果,客户端设置的IP和端口与服务器不同,服务器不能与客户建立连接,就会弹出提示对话框,如截图:
(6)当运行用户端程序后,会弹出用户对话框,如截图:
(7)点击“连接服务器”后,会进入设置IP与端口对话框,如截图:
6.设计体会
通过本局域网消息广播系统的设计与开发,深深地让我们明白把理论用于实践的重要性,本来对学计算机的同学来说,实践性是非常重要的,如果只注重计算机理论,而忽视它的运用与操作性,那么可能永远也不能真正的学会计算机。
在开发本系统过程中,我们也发现了自己在本课程及计算机理论的一些知识上的不足,希望能通过这次课程设计的开发,来加强我们对理论知识的巩固,从而本次的系统的开发来引导我们进行相关知识的学习与扩展,总之,本系统的设计与开发,让我们实践能力提高了,也有了一次实践的经历,希望以后会通过更多的实践机会来提高编程开发能力。