`

VC视频教程笔记(第16课)

    博客分类:
  • C++
阅读更多
http://www.sunxin.org/forum/thread/210.html?page=1
作者:虎非龙

第16课
1.事件对象:来实现线程的同步。与互斥对象一样均属于内核对象。
            当人工重置有信号时,所有线程均得到信号,所以不能设为人工重置。代码就不贴了。
            通过创建匿名的事件对象,也可以让一个程序只能运行一个实例。 
2.关键代码段实现线程的同步:类似公用电话亭,只有当电话亭里面没人了,其它人才可以再进去打电话。用了4个函数,这种方法比较简单!但缺点是如果使用了多少关键代码码,容易赞成线程的死锁
3.线程死锁,用关键代码示例,用了两个临界区对象,实战中要注意避免这种错误!
4.使用异步套接字编写网络聊天室
  1)加载套接字库,进行版本协商,包含头文件,链接库文件,这次请示的是2.2版本!
  2)在类CChatDlg中增加一个成员变量m_socket,在析构函数中释放这个变量
  3)利用WSASocket()创建套接字(数据报类型的UDP型的)
  4)然后调用WSAAsyncSelect(m_socket,m_hWnd,UM_SOCK,FD_READ)为网络事件定义消息!此时如果发生FD_READ消息,系统会发送UM_SOCK消息给应用程序!程序并不会阻塞在这儿了!
  以上是在BOOL CChatDlg::OnInitDialog()完成
  5)然后完成消息响应!
  头文件中:#define UM_SOCK  WM_USER+1
afx_msg void OnSock(WPARAM,LPARAM);
   源文件中:
    ON_MESSAGE(UM_SOCK,OnSock)
    实现消息响应函数:void CChatDlg::OnSock(WPARAM wParam,LPARAM lParam)
{
switch(LOWORD(lParam))
{
case FD_READ:
  WSABUF wsabuf;
  wsabuf.buf=new char[200];
  wsabuf.len=200;
  DWORD dwRead;
  DWORD dwFlag=0;
  SOCKADDR_IN addrFrom;
  int len=sizeof(SOCKADDR);
  CString str;
  CString strTemp;
  HOSTENT *pHost;
  if(SOCKET_ERROR==WSARecvFrom(m_socket,&wsabuf,1,&dwRead,&dwFlag,
      (SOCKADDR*)&addrFrom,&len,NULL,NULL))
  {
   MessageBox("接收数据失败!");
   return;
  }
  pHost=gethostbyaddr((char*)&addrFrom.sin_addr.S_un.S_addr,4,AF_INET);
  //str.Format("%s说 :%s",inet_ntoa(addrFrom.sin_addr),wsabuf.buf);
  str.Format("%s说 :%s",pHost->h_name,wsabuf.buf);
  str+="\r\n";
  GetDlgItemText(IDC_EDIT_RECV,strTemp);
  str+=strTemp;
  SetDlgItemText(IDC_EDIT_RECV,str);
  break;
}
}
OK!
      6)完成数据发送的功能!
      void CChatDlg::OnBtnSend()
{
// TOD Add your control notification handler code here
DWORD dwIP;
CString strSend;
WSABUF wsabuf;
DWORD dwSend;
int len;
CString strHostName;
SOCKADDR_IN addrTo;
HOSTENT* pHost;
if(GetDlgItemText(IDC_EDIT_HOSTNAME,strHostName),strHostName=="")
{
  ((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->GetAddress(dwIP);
  addrTo.sin_addr.S_un.S_addr=htonl(dwIP);
}
else
{
  pHost=gethostbyname(strHostName);
  addrTo.sin_addr.S_un.S_addr=*((DWORD*)pHost->h_addr_list[0]);
}

addrTo.sin_family=AF_INET;
addrTo.sin_port=htons(6000); GetDlgItemText(IDC_EDIT_SEND,strSend);
len=strSend.GetLength();
wsabuf.buf=strSend.GetBuffer(len);
wsabuf.len=len+1; SetDlgItemText(IDC_EDIT_SEND,""); if(SOCKET_ERROR==WSASendTo(m_socket,&wsabuf,1,&dwSend,0,
   (SOCKADDR*)&addrTo,sizeof(SOCKADDR),NULL,NULL))
{
  MessageBox("发送数据失败!");
  return;
}

}      7)完成将主机名转换为IP地址的功能,以前将IP地址转换为主机名的功能
嘿嘿,单线程的聊天室创建完毕!性能并且非常出色!
分享到:
评论

相关推荐

    孙鑫VC视频教程笔记[1].doc

    【孙鑫VC视频教程笔记】是一份记录了学习VC++编程知识的文档,主要涵盖了MFC框架和SDK编程的基础概念及技巧。以下是其中涉及到的重要知识点的详细解释: 1. **StdAfx.h**:在MFC项目中,StdAfx.h文件包含了基本的...

    VC网络验证编写开发视频教程【20课】

    资源名称:VC网络验证编写开发视频教程【20课】资源目录:【】编程视频教程网络验证编写20课第一课【】编程视频教程网络验证编写20课第七课【】编程视频教程网络验证编写20课第三课[51ZSK.COM]【】编程视频教程网络...

    C++视频教程-VC深入详解自学笔记(完全免费

    《C++视频教程-VC深入详解自学笔记》是一份全面且免费的学习资源,旨在帮助初学者和有一定基础的开发者深入理解C++编程语言,特别是通过Visual C++ (VC++)这一开发环境进行实践。教程由孙鑫整理,涵盖了从基础到高级...

    VC.rar_VC 视频教程

    这个"VC.rar"压缩包中的"VC视频教程.exe"可能是一个交互式的视频教程,旨在帮助学习者掌握VC++的基本概念和高级特性。通过观看这些视频,无论是初学者还是有经验的开发者,都可以期望获得以下方面的知识: 1. **...

    孙鑫老师vc视频教程.txt

    孙鑫老师vc视频教程

    VC就业培训宝典之MFC视频教程

    资源名称:VC 就业培训宝典之MFC视频教程资源目录:【】吕鑫:MFC视频教程第一章(1-1)【】吕鑫:MFC视频教程第一章(1-2)【】吕鑫:MFC视频教程第七章(7-1)【】吕鑫:MFC视频教程第七章(7-2)【】吕鑫:MFC...

    VC2008视频教程

    【VC2008视频教程】是一套专为初学者设计的编程教学资源,旨在帮助对Visual C++ 2008(也称VC++ 2008或MSVC9)感兴趣的用户快速掌握该开发环境和C++编程语言的基础知识。在本教程中,你将学习到如何安装Visual ...

    VC自觉笔记-1

    VC6.0的学习笔记。 正在完美中。。。。。

    VC#学习笔记仅供参考

    【VC#学习笔记仅供参考】 本笔记主要涵盖了ASP.NET应用程序的开发知识,特别是针对网页设计和数据库访问技术。在学习过程中,我们将逐步了解如何构建信息浏览页面,并深入探讨各种Web服务器控件的使用。 首先,...

    VC6.0入门视频教程及源码

    适合VC6初学者,第一步观看视频,第二步运行配套源程序学习。课程目录如下: 01基于控制台的Win32程序;02 基于对话框的MFC工程;03 基于单文档的MFC工程;04 Windows基本控件编程;05工具栏和菜单的编程;06 Win32 ...

    VC入门教程 7天学会VC

    《VC入门教程 7天学会VC》是一份专为初学者设计的编程教育资源,由知名讲师张孝祥的课程笔记整理而成。这份教程主要聚焦于Visual C++(简称VC)的使用,帮助学习者在短时间内掌握C++编程基础以及如何在VC环境下进行...

    使用VC进行VFW视频捕获笔记

    本文是关于使用Microsoft Visual C++ (VC++) 和Video for Windows (VFW) API进行视频捕获的详细笔记。VFW是Windows操作系统提供的一种视频处理框架,它简化了视频捕获、处理和播放的过程。下面将深入探讨各个关键...

    VC串口通信modbus协议源代码视频教程

    VC串口通信modbus协议源代码工程视频教程工程建立详细步骤

    vc学习教程-界面设计

    vc学习教程-界面设计,方便好用,又实惠

    如何使用vc打造局域网聊天室第1课

    完整讲述了如何使用vc打造局域网聊天室,一共10课,每课都是一个视频教程(动画教程,时长半个小时到一个小时,画面清晰,解压后大小100多M),节目如下: 第一课、编程环境及准备知识 第二课、聊天室界面的...

    vc6.0学习笔记

    **VC6.0学习笔记** Microsoft Visual C++ 6.0(简称VC6.0)是微软公司推出的一款经典且广泛使用的C++集成开发环境,它在20世纪90年代末期至21世纪初期占据了重要的地位。这份学习笔记旨在帮助初学者了解并掌握VC6.0...

    vc深入详解 笔记

    **VC深入详解笔记** 本文将基于孙鑫的《VC深入详解》一书,结合作者的个人笔记,深入探讨Microsoft Visual C++(简称VC)的各个方面,帮助读者掌握关键概念和技术,提升编程技能。《VC深入详解》是学习VC++的重要...

    在工作中对VC工作笔记

    【标题】"在工作中对VC工作笔记"涵盖了在使用Visual C++(简称VC)进行软件开发过程中的实践经验与总结。这份笔记可能包含了作者在实际项目中遇到的问题、解决方法以及对于VC工具和库的深入理解。 【描述】"一些...

    vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟19

    vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟v

    如何使用vc打造局域网聊天室第10课

    完整讲述如何使用vc打造局域网聊天室,共10课,每课都是一个视频(动画教程,时长半个小时到一个小时,画面清晰,解压后大小100多 M),节目如下: 第一课、编程环境及准备知识 第二课、聊天室界面的制作及初始...

Global site tag (gtag.js) - Google Analytics