八宝书库 > 文学其他电子书 > VC语言6.0程序设计从入门到精通 >

第72部分

VC语言6.0程序设计从入门到精通-第72部分

小说: VC语言6.0程序设计从入门到精通 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






                    pChattersView…》ClearChattersList();  



       }       



       CString strTemp = pMsg…》m_strText;  



       //得到所有的用户名并加入到用户列表中  



       do  



       {  



             CString sName = strTemp。Left(strTemp。Find(〃:〃;0));  



             pChattersView…》AddToChattersList(sName);  



             strTemp = strTemp。Mid(strTemp。Find(〃:〃 ; 0)+1);  



       }while(strTemp。Find(〃:〃;0) != …1);  



                                                                                                                  ·319 ·  


…………………………………………………………Page 331……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  



       }  



      为 DeleteContents() 函数编写如下代码:  



      void CChatClientDoc::DeleteContents()  



       {  



             if ((m_pSocket != NULL) && (m_pFile != NULL) && (m_pArchiveOut != NULL))  



             {  



                   //首先发送用户名  



                   SendMsg(m_strName; LEAVING_CHAT; false);  



                   CMsg msg;  



                   CString strTemp;  



                   //发送普通消息  



                   strTemp。Format(〃:离开了聊天室〃);  



                   msg。code = NORMAL_MESSAGE;  



                   msg。m_bClose = TRUE;  



                   msg。m_strText = m_strName + strTemp;  



                   msg。Serialize(*m_pArchiveOut);  



                   m_pArchiveOut…》Flush();           



             }  



             //删除各对象  



             delete m_pArchiveOut;  



             m_pArchiveOut = NULL;  



             delete m_pArchiveIn;  



             m_pArchiveIn = NULL;  



             delete m_pFile;  



             m_pFile = NULL;  



             //关闭连接  



             if (m_pSocket != NULL)  



             {  



                   m_pSocket…》ShutDown(2);  



                   delete m_pSocket;  



                   m_pSocket = NULL;  



             }  



             //更新视图  



             for(POSITION pos=GetFirstViewPosition();pos!=NULL;)  



             {  



                   CView* pView = GetNextView(pos);  



                   if (pView…》IsKindOf(RUNTIME_CLASS(CMessageView)))  



                   {  



                         CMessageView* pChatView = (CMessageView*)pView;  



                         pChatView…》GetEditCtrl()。SetWindowText(_T(〃〃));  



 ·320 ·  


…………………………………………………………Page 332……………………………………………………………

                                                                                                      第 11 章    网络编程  



                   }  



                   if (pView…》IsKindOf(RUNTIME_CLASS(CChattersView)))  



                   {  



                         CChattersView* pCChattersView = (CChattersView*)pView;  



                         pCChattersView…》ClearChattersList();  



                   }  



            }  



            CDocument::DeleteContents();  



      }  



      至此,整个程序编写完毕。分别运行服务器端程序和客户端程序,效果如图 11…13~图 11…15 

所示。  



                                                                                                                      



                        图 11…13    服务器端界面                                           图 11…14    客户端界面 1  



                                                                                         



                                                 图 11…15    客户端界面 2  



      本程序实现了一个简单的基于服务器/客户端模型的网络聊天系统,系统功能虽然简单, 

但是体现了一般网络编程的基本步骤 。在本程序中,由于对信息进行了封装,且采用了文档

视图结构,用户可以很容易扩展其功能,比如可以加入两人私聊(其他人看不到聊天内容 )、 

服务器广播等功能。由于篇幅所限,这些功能请读者自行实现。  

        



                                                                                                                    ·321 ·  


…………………………………………………………Page 333……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  



11。5    利用  MSm  控件进行串口编程  



    计算机串口编程在网络通信中也有着十分广泛的应用,比如电话、传真、视频控制等。 

本节将介绍如何在 Visual C++ 中利用 MSm 控件进行串口编程。  



11。5。1    MSm 控件介绍  



    1.MSm 控件处理通信的方式  



    MSm 控件为应用程序提供了读写串口功能,它提供了两种处理通信的方法。  

    o  事件驱动方式 。在这种情况下,使用 MSm 控件的 Onm 事件可以捕获和处理 

     这些通信事件。同时,Onm 也可以捕获和处理通信中的错误。  

    o  查询方式。用户可以在每个重要的程序功能之后检查  mEvent  属性的值来检测事 

     件和通信错误。在通信频繁的情况下,这种方式更为方便。  



    2 .MSm 控件常用属性  



    (1)mPort 属性  

    该属性用于设置或返回通信端口号,端口号的范围是                  1~16,默认为  1。对应的函数为 

void SetmPort(short nNewValue)和 short GetmPort() 。  



    (2 )Settings 属性  

    该属性用于设置或返回数据传输率、奇偶校验、数据位和停止位参数,其属性值格式为 

“BBBB;P;D;S ”。  

    其中  BBBB  为数据传输率,P       为奇偶校验,D      为数据位,S     为停止位。默认值为 

 9600;N;8;1 ”。  

“ 

    该属性对应的函数为 void SetSettings(LPCTSTR lpszNewValue)和 String GetSettings()。  



    (3 )PortOpen 属性  

    该属性用于设置或返回串口状态,值为 TRUE  时打开,值为 FALSE  时关闭。如果要打 

开端口,则必须现设置 mPort 属性。  

    该属性对应的函数为 void SetPortOpen(BOOL bNewValue)和 BOOL GetPortOpen() 。  



    (4 )Input 属性  

    该属性用于从接收缓冲区中读取数据,其对应的函数为 VARIANT GetInput() 。  



    (5 )InputMode 属性  

    该属性用于设置或返回从接收缓冲区读取数据的格式,属性值为 0 时表示以文本格式读 

取数据;属性之为 1 时表示以二进制格式读取数据;属性值为 2 时表示以十六进制格式读取 

数据。  

    该属性对应的函数分别为 void SetInputMode(long nNewValue)和 long GetInputMode() 。  



    (6 )InBufferCount 属性  

    该属性用于设置或返回在接收缓冲区中等待的字符数,该属性在端口未打开时不可用。 



 ·322 ·  


…………………………………………………………Page 334……………………………………………………………

                                                                    第 11 章    网络编程  



对应的函数为 void SetInBufferCount(short nNewValue)和 short GetInBufferCount() 。  



    (7 )InBufferSize 属性  

    该 属 性 用 于 设 置 或 返 回 接 收 缓 冲 区 大 小 的 字 节 数 , 其 对 应 的 函 数 分 别 为               void  

SetInBufferSize(short nNewValue)和 short GetInBufferSize() 。  



    (8)Output 属性  

    该属性用于向发送缓冲区中写入数据,其对应的函数为 void SetOutput(const VARIANT&  

newValue) 。  



    (9 )OutBufferCount 属性  

    该属性用于设置或返回在发送缓冲区中等待的字符数,该属性在端口未打开时不可用。 

其对应的函数分别为 void SetOutBufferCount(short nNewValue)和 short GetOutBufferCount() 。  



    (10)OutBufferSize 属性  

    该 属 性 用 于 设 置 或 返 回 发 送 缓 冲 区 的 字 节 大 小 , 对 应 的 函 数 分 别 为                   void  

SetOutBufferSize(short nNewValue)和 short GetOutBufferSize() 。  



    (11)mEvent 属性  

    该属性用于设置或返回串口事件,其对应的函数分别为                                void  SetmEvent(short  

nNewValue)和 short GetmEvent() 。常见的串口事件如表 11…13 所示。  



    表 11…13                         常见串口事件  



            常数                      取值                          描述  

 EvSend                   1                   发送事件  

 EvReceive                2                   接收事件  

 EvCTS                    3                   clear…to…send 线的状态发生变化  

 EvDSR                    4                   data…set ready 线的状态发生变化  

 EvCD                     5                   carrier detect 线的状态发生变化  

 EvRing                   6                   检测到震铃信号  

 EvEOF                    7                   收到文件结束字符  



    (12)RThreshold 属性  

    该属性用于设置或返回 RThreshold 数值,所谓 RThreshold 数值是通过 MSm 控件将 

mEvent 属性设置为 EvReceive,并在产生 Onm 事件之前所接收的字符数。  

    该属性对应的函数为 void SetRThreshold(short nNewValue)和 short GetRThreshold() 。  



11。5。2    利用 MSm 控件编程的基本流程  



    利用 MSm 控件编程的基本流程如下。  

    o  在当前 Project 中插入 MSm 控件;  

    o  初始化并打开串口;  

    o  捕捉串口事项;  

    o  串口读写;  

    o  关闭串口。  



                                                                              ·323 ·  


…………………………………………………………Page 335……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  



11。5。3    利用 MSm 进行串口通信  



实例 11…2:MSm 控件使用实例。源代码在光盘中“11实例 11…2MSm”目录下。  



     本节通过编写一个小程序来实现利用 MSm 控件进行串口数据传输。  

     新建一个基于对话框的 MFC 工程,取名为 MSm 。依次单击菜单栏的“Project ”→ 

“Add To Project ”→“ponents and Controls ”,弹出添加控件对话框,如图 11…16 所示。然 

后打开“Registered ActiveX Controls ”文件夹,选中“Microsoft munications Control ,vision  

6。0 ”控件,将其添加到工程中,如图 11…17 所示。  



                                                                                        



          图 11…16    添加控件对话框                                               图 11…17    加入 MSm 控件  



     然后编辑对话框界面,完成后的效果如图  11…18 所示(本例中,用于选择串口的控件为 

bo Box 控件,在为对话框添加 bo Box 控件的时候,需要为该 bo Box 控件加入 



1 和 2 两个数据,分别表示串口 1 和串口 2 ),其中控件                       就是 MSm 控件。  



    注意:在为 bo Box 控件添加数据的时候,如果数据多于一个,则在添加后面数据的时候,要 



          按住 Ctrl 键,同时按回车键进行换行,而不是直接用回车键进行换行。  



                                                              



                                   图 11…18    对话框界面  



     为对话

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的