孙鑫VC学习笔记:第十六讲 用异步套接字编写聊天程序
来源:互联网 发布:淘宝助理客服电话 编辑:程序博客网 时间:2024/04/30 00:27
基于消息的异步套接字
Windows套接字在两种模式下执行I/O操作,阻塞和非阻塞。在阻塞模式下,在I/O操作完成前,执行操作的Winsock函数会一直等待下去,不会立即返回程序(将控制权交还给程序)。而在非阻塞模式下,Winsock函数无论如何都会立即返回。
Windows Sockets为了支持Windows消息驱动机制,使应用程序开发者能够方便地处理网络通信,它对网络事件采用了基于消息的异步存取策略。
Windows Sockets的异步选择函数WSAAsyncSelect()提供了消息机制的网络事件选择,当使用它登记的网络事件发生时,Windows应用程序相应的窗口函数将收到一个消息,消息中指示了发生的网络事件,以及与事件相关的一些信息。
--------------------------------------------------------------------------------
用异步套接字编写一个基于MFC对话框的聊天程序:
1.新建一个基于MFC项目工程Chat,如下
2.加载套接字库,有下面两种方法,上一讲中我们用的是AfxSocketInit()加载套接字库,但是只能加载1.1版本的套接字库。今天我们使用WSAStartup()加载套接字库版本2。
1)在预编译头文件中包含头文件:winsock2.h(不是Afxsock.h)
2)链接库文件ws2_32.lib,如果不链接将会编译链接出错
3)在CChatApp::InitInstance()函数中加载套接字库版本2
4)为CChatApp增加析构函数,调用WSACleanup()来终止对套接字库的使用。
Windows中增加的扩展函数都会在前面加上前缀WSA。
--------------------------------------------------------------------------------
3.初始化套接字,
1)在CChatDlg类中添加成员变量SOCKET m_socket;
在构造函数中初始化变量m_socket;在析构函数中调用closesocket(m_socket)关闭套接字。
2)添加初始化套接字库的成员函数BOOL InitSocket();
步骤如下:
1。新建套接字
2。新建地址。
3。绑定
4。请求一个windows的基于消息的网络事件通知
5。在BOOL CChatDlg::OnInitDialog()中调用BOOL CChatDlg::InitSocket()
--------------------------------------------------------------------------------4.编写接收端程序
自定义消息响应函数步骤:
1)在ChatDlg.h中定义#define UM_SOCK WM_USER+1
2)消息原型声明
3)在添加消息映射
4)实现消息响应函数
--------------------------------------------------------------------------------
5.编写发送端程序
最后为按钮添加消息实现代码:
注意,
此程序的接收端和发送端是在同一个线程下完成的,
如果我们采用阻塞套接字会因为接收函数的调用而使主线程暂停运行。
这样我们采用异步选择的机制完成了主线程的接收端和发送端,
而不需要用多个线程,这个可以提高程序的性能。
- 孙鑫VC学习笔记:第十六讲 用异步套接字编写聊天程序
- 孙鑫VC学习笔记:第十六讲 (三) 用异步套接字编写聊天程序
- 孙鑫VC学习笔记:第十五讲 编写一个基于MFC对话框的聊天程序
- 孙鑫VC学习笔记:第十五讲 (四) 编写一个基于MFC对话框的聊天程序
- 孙鑫VC学习笔记:第十五讲 编写一个基于MFC对话框的聊天程序
- MFC(线程同步与异步套接字,孙鑫C++第十六讲笔记整理)
- MFC - 线程同步与异步套接字 (孙鑫C++第十六讲笔记整理)
- 《VC++深入详解》学习笔记 第十六章 线程同步与异步套接字编程
- 孙鑫VC视频教程笔记之第十六课(下)“异步套接字编程”
- 孙鑫: 第十六讲 线程同步与异步套接字编程收
- vc++学习笔记16 线程同步,异步套接字
- 套接字聊天程序
- VC 异步套接字
- vc异步套接字
- 孙鑫VC学习笔记:第十六讲 利用事件对象实现线程间的同步
- 孙鑫VC学习笔记:第十六讲 利用关键代码段实现线程间的同步
- 孙鑫VC学习笔记:第十六讲 (二) 利用关键代码段实现线程间的同步
- 孙鑫VC学习笔记:第十六讲 (一) 利用事件对象实现线程间的同步
- 孙鑫VC学习笔记:第十六讲 利用事件对象实现线程间的同步
- 孙鑫VC学习笔记:第十六讲 利用关键代码段实现线程间的同步
- 苹果电脑创始人乔布斯:讲三个我自己的故事
- 希望结交济南地区优秀美工
- 原型(Prototype):减少AJAX的开发痛苦
- 孙鑫VC学习笔记:第十六讲 用异步套接字编写聊天程序
- xml 解析之digester
- 城门失火,殃及池鱼
- ClearCase Config_Spec 规则之Include与静态视图装载规则
- 我和我女朋友之十三
- C#与C++的比较
- jboss4中消息bean访问远程服务器的消息队列
- 中国移动彩信介绍
- Linux环境进程间通信: 共享内存