教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
  网站导航: 库库中文网 · 系统编程教程 · VC语言 · VC编程技巧  

用VC++6.0地Sockets API完成一个聊天室程序

教程推荐
『用VC++6.0地Sockets API完成一个聊天室程序』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2005-7-19 
1.VC++网络编程及Windows Sockets API简介

  VC++对网络编程的支持有socket支持,WinInet支持,MAPI和ISAPI支持等。其中,Windows Sockets API是TCP/IP网络环境里,也是Internet上进行开发最为通用的API。最早美国加州大学Berkeley分校在UNIX下为TCP/IP协议开发了一个API,这个API就是著名的Berkeley Socket接口(套接字)。在桌面操作系统进入Windows时代后,仍然继承了Socket方法。在TCP/IP网络通信环境下,Socket数据传输是一种特殊的I/O,它也相当于一种文件描述符,具有一个类似于打开文件的函数调用-socket()。可以这样理解:Socket实际上是一个通信端点,通过它,用户的Socket程序可以通过网络和其他的Socket应用程序通信。Socket存在于一个"通信域"(为描述一般的线程如何通过Socket进行通信而引入的一种抽象概念)里,并且与另一个域的Socket交换数据。Socket有三类。第一种是SOCK_STREAM(流式),提供面向连接的可靠的通信服务,比如telnet,http。第二种是SOCK_DGRAM(数据报),提供无连接不可靠的通信,比如UDP。第三种是SOCK_RAW(原始),主要用于协议的开发和测试,支持通信底层操作,比如对IP和ICMP的直接访问。

  2.Windows Socket机制分析

  2.1一些基本的Socket系统调用

  主要的系统调用包括:socket()-创建Socket;bind()-将创建的Socket与本地端口绑定;connect()与accept()-建立Socket连接;listen()-服务器监听是否有连接请求;send()-数据的可控缓冲发送;recv()-可控缓冲接收;closesocket()-关闭Socket。

  2.2Windows Socket的启动与终止

  启动函数WSAStartup()建立与Windows Sockets DLL的连接,终止函数WSAClearup()终止使用该DLL,这两个函数必须成对使用。

  2.3异步选择机制

  Windows是一个非抢占式的操作系统,而不采取UNIX的阻塞机制。当一个通信事件产生时,操作系统要根据设置选择是否对该事件加以处理,WSAAsyncSelect()函数就是用来选择系统所要处理的相应事件。当Socket收到设定的网络事件中的一个时,会给程序窗口一个消息,这个消息里会指定产生网络事件的Socket,发生的事件类型和错误码。

  2.4异步数据传输机制

  WSAAsyncSelect()设定了Socket上的须响应通信事件后,每发生一个这样的事件就会产生一个WM_SOCKET消息传给窗口。而在窗口的回调函数中就应该添加相应的数据传输处理代码。

  3.聊天室程序的设计说明

  3.1实现思想

  在Internet上的聊天室程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。

  3.2服务器端工作流程

  服务器端通过socket()系统调用创建一个Socket数组后(即设定了接受连接客户的最大数目),与指定的本地端口绑定bind(),就可以在端口进行侦听listen()。如果有客户端连接请求,则在数组中选择一个空Socket,将客户端地址赋给这个Socket。然后登录成功的客户就可以在服务器上聊天了。

  3.3客户端工作流程

  客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了。

4.核心代码分析

  限于篇幅,这里仅给出与网络编程相关的核心代码,其他的诸如聊天文字的服务器和客户端显示读者可以自行添加。

  4.1服务器端代码

  开启服务器功能:

void OnServerOpen() //开启服务器功能
{
  WSADATA wsaData;
  int iErrorCode;
  char chInfo[64];
  if (WSAStartup(WINSOCK_VERSION, &wsaData)) //调用Windows Sockets DLL
   { MessageBeep(MB_ICONSTOP);
    MessageBox("Winsock无法初始化!", AfxGetAppName(), MB_OK|MB_ICONSTOP);
    WSACleanup();
    return; }
  else
   WSACleanup();
   if (gethostname(chInfo, sizeof(chInfo)))
   { ReportWinsockErr("\n无法获取主机!\n ");
    return; }
   CString csWinsockID = "\n==>>服务器功能开启在端口:No. ";
   csWinsockID += itoa(m_pDoc->m_nServerPort, chInfo, 10);
   csWinsockID += "\n";
   PrintString(csWinsockID); //在程序视图显示提示信息的函数,读者可自行创建
   m_pDoc->m_hServerSocket=socket(PF_INET, SOCK_STREAM, DEFAULT_PROTOCOL);
   //创建服务器端Socket,类型为SOCK_STREAM,面向连接的通信
   if (m_pDoc->m_hServerSocket == INVALID_SOCKET)
   { ReportWinsockErr("无法创建服务器socket!");
    return;}
   m_pDoc->m_sockServerAddr.sin_family = AF_INET;
   m_pDoc-&g

[1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页

】【关闭窗口
  上一页:
  下一页:
 ·网站导航: 库库中文网 · 系统编程教程 · VC语言 · VC编程技巧
VC编程技巧:相关文章
VC编程技巧点击榜
普通教程扩展函数AcceptEx关于client关闭
普通教程vc程序中直接显示JIF图片
普通教程Python 地数据库操作
普通教程Javascript - Prototype Based 
普通教程QQ魔法表情完成机制
普通教程为你地MFC程序增加宏脚本语言
普通教程发送快捷方式到指定地文件夹
普通教程reference memory ,or when及其
普通教程SendMessage和PostMessage,tot
普通教程中译英一则,bogusly rip,GetM
PHOTOSHOP - 基础教程 抠图专题 蒙版专题 3DsMax 基础 设计实例 Maya设计实例
3D设计教程
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright ? 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL. 电脑硬件 电脑知识 教程学习
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光