计算机网络大作业(2)
}
void CTalkDlg::OnAccept() { //此函数用于服务器 //接受链接请求 m_sListenSocket.Accept(m_sConnectSocket); //激活消息输入和发送的相关控件 GetDlgItem(IDC_EDIT_MSG)->EnableWindow(TRUE); GetDlgItem(IDOK)->EnableWindow(TRUE); GetDlgItem(IDC_STATIC_MSG)->EnableWindow(TRUE); }
void CTalkDlg::OnConnect() { //此处用于\客户机\ //激活消息输入和发送的相关控件 GetDlgItem(IDC_EDIT_MSG)->EnableWindow(TRUE); GetDlgItem(IDOK)->EnableWindow(TRUE); //botton send GetDlgItem(IDC_STATIC_MSG)->EnableWindow(TRUE); //激活\关闭\按钮,这仅对\客户机\有效 GetDlgItem(IDC_BIN_CLOSE)->EnableWindow(TRUE); }
6、发送和接收数据
void CTalkDlg::OnSendMsg() { // TODO: Add your control notification handler code here int nLen;//消息长度 int nSent;//已发送消息的长度 //从对话筐中取出数据 UpdateData(TRUE); //判断要发送的消息是否为空 if(!m_strMsg.IsEmpty()) { //获取消息的长度 nLen=m_strMsg.GetLength(); //发送消息 nSent=m_sConnectSocket.Send(LPCTSTR(m_strMsg),nLen); //判断发送是否成功 if(nSent!=SOCKET_ERROR) {
//发送成功,将消息添加到“发送的消息“列表框 m_listSent.AddString(m_strMsg); UpdateData(FALSE); } else { AfxMessageBox(\信息发送错误!\ } //清除当前消息 m_strMsg.Empty(); //更新对话框数据 UpdateData(FALSE); } }
void CTalkDlg::OnReceive() { char *pBuf=new char[1025]; int nBufSize=1024; int nReceived; CString strReceived; //接收消息 nReceived=m_sConnectSocket.Receive(pBuf,nBufSize); //判断接收是否成功 if(nReceived!=SOCKET_ERROR) { //保留接收消息的有效部分 pBuf[nReceived]=NULL; //将消息转化为CString对象 strReceived=pBuf; //将消息添加到“接收的消息”列表中 m_listReceived.AddString(strReceived); //更新对话筐数据 UpdateData(FALSE); } else { //发送消息失败,给出错误提示 AfxMessageBox(\信息接收错误!\ } }
7、终止连接
void CTalkDlg::OnClose() { //关闭连接的套接字 m_sConnectSocket.Close(); //禁用消息输入和发送的相关控件 GetDlgItem(IDC_EDIT_MSG)->EnableWindow(FALSE); GetDlgItem(IDOK)->EnableWindow(FALSE);//botton send GetDlgItem(IDC_STATIC_MSG)->EnableWindow(FALSE); GetDlgItem(IDC_BIN_CLOSE)->EnableWindow(FALSE); //清除列表框中的内容 while(m_listSent.GetCount()!=0) m_listSent.DeleteString(0); while(m_listReceived.GetCount()!=0) m_listReceived.DeleteString(0); //如果是“客户机” if(m_cmbType.GetCurSel()==1) { //对于客户机 //激活与连接相关的控件 GetDlgItem(IDC_BIN_CONNECT)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_SERVNAME)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_SERVPORT)->EnableWindow(TRUE); GetDlgItem(IDC_STATIC_SERVNAME)->EnableWindow(TRUE); GetDlgItem(IDC_STATIC_SERVPORT)->EnableWindow(TRUE); GetDlgItem(IDC_COMBO_BOX)->EnableWindow(TRUE); } }
void CTalkDlg::OnBinClose() { // TODO: Add your control notification handler code here //调用OnClose()成员函数 OnClose(); }
四、运行截图
1、启动服务器,使服务器处于侦听状态
2、启动客户机程序
此时已经连接成功
3、开始聊天
此时已经可以实现通信功能。
五、总结
通过以上学习让我学会了什么是基于C/S模式的开发,同是在调试代码的过
成中也让我深深的体会到了调试的艰苦,因为有时候一个小小的错误可以调试一个下午都找不到错误在什么地方,最后当你找到的时候你会发现那是一个小的不能再小的错误,但是这么一个错误却浪费了你一个下午的时间。所以从这个地方我可以学到在编代码的过程中一定要注意细节,一定要细心。
还有其实细节只是我学到的一小部分,最重要的是,在编写一个软件的时候的前期规划,这个非常重要,现在我深有体会,因为之前的一些软件基本上都是先从代码下手,但是这次我从规划开始,先整天想好架构,然后具体细化,最后都编代码,整个过程还不到我以前编写一个软件所用的时间的一半。
…… 此处隐藏:874字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]2021年北京上半年临床医学检验技师生物
- [实用模板]SAP GUI 7.10客户端安装配置文档
- [实用模板]2001年临床执业医师资格考试综合笔试试
- [实用模板]36机场工作实用英语词汇总结
- [实用模板](一)社会保险稽核通知书
- [实用模板]安全教育主题班会材料
- [实用模板]濉溪县春季呼吸道传染病防控应急演练方
- [实用模板]长沙房地产市场周报(1.30-2.3)
- [实用模板]六年级数学上册典中点 - 图文
- [实用模板]C程序设计(红皮书)习题官方参考答案
- [实用模板]中国证监会第一届创业板发行审核委员会
- [实用模板]桥梁工程复习题
- [实用模板]2011学而思数学及答案
- [实用模板]初中病句修改专项练习
- [实用模板]监理学习知识1 - 图文
- [实用模板]小机灵杯四年级试题
- [实用模板]国贸专业毕业论文模板
- [实用模板]教育学概论考试练习题-判断题4
- [实用模板]2015届高考英语一轮复习精品资料(译林
- 00Nkmhe_市场营销学工商管理_电子商务_
- 事业单位考试法律常识
- 诚信教育实施方案
- 吉大小天鹅食品安全检测箱方案(高中低
- 房地产销售培训资料
- 高一地理必修1复习提纲
- 新概念英语第二册lesson_1_练习题
- 证券公司内部培训资料
- 小学英语时间介词专项练习
- 新世纪英语专业综合教程(第二版)第1册U
- 【新课标】浙教版最新2018年八年级数学
- 工程建设管理纲要
- 外研版 必修一Module 4 A Social Surve
- Adobe认证考试 AE复习资料
- 基于H.264AVC与AVS标准的帧内预测技术
- 《食品检验机构资质认定管理办法》(质
- ABB变频器培训课件
- (完整版)小学说明文阅读练习题及答案
- 深思洛克(SenseLock) 深思IV,深思4,深
- 弟子规全文带拼音




