📄 csdn_文档中心_用winsock实现聊天室的vc++程序设计.htm
字号:
<TD align=middle width=620>
<TABLE bgColor=#eeeeee border=0 cellPadding=0 cellSpacing=0 width=600>
<TBODY>
<TR bgColor=#ffffff>
<TD align=middle height=10 width=50></TD>
<TD align=right><A href="http://www.csdn.net/">CSDN</A> - <A
href="http://www.csdn.net/develop/">文档中心</A> - <FONT
color=#003399>Visual C++</FONT> </TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>标题</FONT></TD>
<TD><B> 用WINSOCK实现聊天室的VC++程序设计</B> andymei(收藏)
</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
<TD width=500> 用WINSOCK实现聊天室的VC++程序设计</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
<TABLE border=0 width=600>
<TBODY>
<TR>
<TD align=left><BR>用WINSOCK实现聊天室的VC++程序设计 <BR><BR>一、SOCKET简介
<BR>80年代初,美国政府的高级研究工程机构(ARPA)给加利福尼亚大
<BR>学Berkeley分校提供了资金,让他们在UNIX操作系统下实现TCP/IP协
<BR>议。在这个项目中,研究人员为TCP/IP网络通信开发了一个API(应用
<BR>程序接口)。这个API称为Socket接口(套接字)。今天,SOCKET接口
<BR>是TCP/IP网络最为通用的API,也是在INTERNET上进行应用开发最为通 <BR>用的API。
<BR>90年代初,由Microsoft联合了其他几家公司共同
<BR>制定了一套WINDOWS下的网络编程接口,即WindowsSockets规范。它是
<BR>BerkeleySockets的重要扩充,主要是增加了一些异步函数,并增加了
<BR>符合Windows消息驱动特性的网络事件异步选择机制。WINDOWSSOCKETS
<BR>规范是一套开放的、支持多种协议的Windows下的网络编程接口。从
<BR>1991年的1.0版到1995年的2.0.8版,经过不断完善并在Intel、
<BR>Microsoft、Sun、SGI、Informix、Novell等公司的全力支持下,已成
<BR>为Windows网络编程的事实上的标准。目前,在实际应用中的
<BR>WINDOWSSOKCETS规范主要有1.1版和2.0版。两者的最重要区别是1.1版
<BR>只支持TCP/IP协议,而2.0版可以支持多协议。2.0版有良好的向后兼容
<BR>性,任何使用1.1版的源代码,二进制文件,应用程序都可以不加修改地 <BR>在2.0规范下使用。
<BR>SOCKET实际在计算机中提供了一个通信端口,可以通过这个端口
<BR>与任何一个具有SOCKET接口的计算机通信。应用程序在网络上传输,接
<BR>收的信息都通过这个SOCKET接口来实现。在应用开发中就像使用文件句 <BR>柄一样,可以对SOCKET句柄进行读,写操作。
<BR>二、基于WINDOWS SOCKET的应用开发介绍。
<BR>在WINDOWS95/98,WINDOWSNT进行WINSOCK开发使用的编程语言有很多,
<BR>VC++,JAVA,DELPHI,VB等。其中VC时使用最普遍,和WINSOCK结合最
<BR>紧密的。并且VC++对原来的WindowsSockets库函数进行了一系列封装,
<BR>继而产生了CAsynSocket、CSocket、CSocketFile等类,它们封装着
<BR>有关Socket的各种功能,是编程变得更加简单。但如果你是一个
<BR>WINSOCK编程的初学者,那么建议你在一开始还是学习WINSOCK最基本的
<BR>API函数进行编程,这样可以大大加深对WINSOCK的了解,对将来很有好 <BR>处。
<BR>在VC中进行WINSOCK的API编程开发,需要使用到下面三个文件: <BR>1、WINSOCK.H: 这是WINSOCK
API的头文件。 <BR>2、WSOCK32.LIB: WINSOCK API连接库文件。在使用中,一点要把它作为项目
<BR>的非缺省的连接库包含到项目文件中去。 <BR>3、WINSOCK.DLL:
WINSOCK的动态连接库,位于WINDOWS的安装目录下。 <BR>WINSOCK接口在WINDOWS编程环境中的位置如下图所示:
<BR><BR><BR><BR>可以看到,WINSOCK。DLL位于TCP/IP协议栈和应用程序之间。也就
<BR>是说,WINSOCK管理与TCP/IP协议的接口。在一开始WINSOCK的应有开
<BR>发时,你不必对TCP/IP协议有很深刻的了解。但是,如果想成为一个为 <BR>网络编程的高手,就一定要对下层了解得十分清楚。
<BR>在网络编程中最常用的方案便是客户机/服务器模型。在这种方案中
<BR>客户应用程序向服务器程序请求服务。一个服务程序通常在一个众所周
<BR>知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,
<BR>直到一个客户对这个服务的地址提出了连接请求。在这个时刻,服务程
<BR>序被“惊醒”并且为客户提供服务-对客户的请求作出适当的反应。虽
<BR>然基于连接协议(流套接字)的服务是设计客户机/服务器应用程序时的
<BR>标准,但有些服务也是可以通过无连接协议(数据报套接字)提供的。 <BR>其编程模型分别如下:
<BR><BR>面向连接协议的SOCKET编程模型
<BR><BR><BR>=======================================================
<BR><BR>无连接协议的SOCKET编程模型
<BR><BR>======================================================
<BR>一般在使用中,面向连接协议的SOCKET编程模型应用最为广泛,因
<BR>为面向连接协议提供了一系列的数据纠错功能,可以保证在网络上传输 <BR>的数据及时、无误地到达对方。
<BR>总的来说,使用SOCKET接口(面向连接或无连接)进行网络通信时, <BR>必须按下面简单的四步进行处理:
<BR>1、程序必须建立一个 SOCKET。 <BR>2、程序必须按要求配置此SOCKET。也就是说,程序要么将此
<BR>SOCKET连接到远方的主机上,要么给此SOCKET指定一个 <BR>本地协议端口。
<BR>3、程序必须按要求通过此SOCKET发送和接收数据。 <BR>4、程序必须关闭此SOCKET。 <BR>三:WINSOCK
API主要函数简介 <BR>作者利用WINSOCK API 编写了一个具有聊天室功能 <BR>的应用程序,可用作学习 WINSOCK
程序设计的参照。WINSOCK API 包 <BR>括很多函数,但其中最常用,包括在文章所附源程序中的有:
<BR>注:只是有关函数的简要说明,具体规则、说明请参见VC++帮助和 <BR>WINSOCK规范。 <BR>函数名 功能 说明
<BR><BR>WSAStartup() <BR> <BR>连结应用程序与 Windows Sockets DLL 的第一个函数
<BR> <BR>此函数是应用程序调用 Windows Sockets DLL函数中的第一个,也唯有此函数呼叫成功後,才可以再调用其他
Windows Sockets DLL 的函数。 <BR>WSACleanup() <BR>结束 Windows Sockets DLL
的使用 当应用程序不再需要使用 Windows Sockets DLL时,须调用此函数来注销使用,以便释放其占用的资源。
<BR>socket() 建立Socket 此函数用来建立一 Socket 描述字,并为此 Socket 建立其所使用的资源。
<BR>closesocket() 关闭某一Socket 此一函数是用来关闭某一 Socket <BR>bind()
将一本地地址与一个SOCKET描述字连接在一起 此函数在服务程序上使用,是调用监听函数listen()必须要调用的函数
<BR>listen() 设定 Socket 为监听状态,准备被连接 此函数在服务程序上使用,来设定 Socket
进入监听状态,并设定最多可有多少个在未真正完成连接前的客户端的连接要求。(目前最大值限制为 5, 最小值为1) <BR>
<BR><BR>accept() 接受某一Socket的连接要求,以完成面向连接的客户端 Socket 的连接请求
服务端应用程序调用此函数来接受客户端Socket 连接请求,accept() 函数的返回值为一新的 Socket,新 Socket
就可用来在服务端和客户端之间的信息传递接收,而原来 Socket 仍然可以接收其他客户端的连接要求. <BR>connect()
要求连接某一Socket到指定的网络上服务端 此函数用在客户端,用来向服务端要求建立连接。当连接建立完成後,客户端即可利用此
Socket 来与服务端进行信息传递。 <BR>recv() 从面向连接的 Socket 接收信息 此函数用来从面向连接的 Socket
接收信息 <BR>send() 使用面向连接的 Socket 发送信息 此函数用来从面向连接的 Socket 发送信息
<BR>WSAAsyncSelect() 要求某一 Socket 有事件 (event) 发生时通知使用者 此函数用来请求Windows
Sockets DLL
为窗口句柄发一条消息-无论它何时检测到由lEvent参数指明的网络事件。要发送的消息由wMsg参数标明.被通知的套接口由s标识。本函数自动将套接口设置为非阻塞模式。
<BR><BR><BR>lEvent参数由下表中列出的值组成 <BR><BR>FD_READ 欲接收读准备好的通知
<BR>FD_WRITE 欲接收写准备好的通知 <BR>FD_OOB 欲接收带边数据到达的通知 <BR>FD_ACCEPT
欲接收将要连接的通知 <BR>FD_CONNECT 欲接收已连接好的通知 <BR>FD_CLOSE 欲接收套接口关闭的通知
<BR><BR>这个函数可以认为是 WINSOCK API 中最为重要的 <BR>一个函数。要想使用好这个函数,你必须对 WINDOWS
编程的事件驱动 <BR>和消息传递有很清楚的了解。 <BR>四:聊天室应用程序的设计说明: <BR>软件功能:
<BR>Internet上可以提供一种叫IRC 的服务。使用者通过客户端的程序
<BR>登录到IRC服务器上,就可以与登录在同一IRC服务器上的客户进行交谈,这也就是平常
<BR>所说的聊天室。在这里,给出了一个在运行TCP/IP协议的网络上实现IRC服务的程序。 <BR>软件使用说明:
<BR>首先,在一台计算机上运行服务端程序,然后就可以在同一网络的
<BR>其他计算机上运行客户端程序,登录到服务器上,各个客户之间就可以聊天了。 <BR>软件设计要点: <BR>1、服务端
<BR>核心代码在 CServerViwe 类中,有一个 SOCKET 变量 <BR>m_hServerSocket 和 SOCKET
数组 m_aClientSocket[MAXClient](MAXClient:
<BR>所定义的接收连接客户的最大数目),m_hServerSocket 用来在指定的端口(>1000)
<BR>进行侦听,如果有客户端请求连接,则在 m_aClientSocket 数组中查找一个空 socket,
<BR>将客户端的地址赋予此 socket。 <BR>每当一个 ClientSocket 接收到信息,都将会向窗口发一条消息。
<BR>程序接收到这个消息后,再把接收到的信息发送给每一个 ClientSocket。 <BR>2、客户端
<BR>客户端比较简单,核心代码在 CClientDlg 类中。只有一个 socket <BR>变量
m_hSocket,与服务端进行连接。连接建立好后,通过此 SOCKET 发送和接收信息。
<BR>为了简化设计,用户名在客户端控制,服务器端只进行简单的接收信
<BR>息和“广播”此信息,不进行名字校验,也就是说,可以有同名客户登录到服务端。这个
<BR>程序设计虽然简单,但是已经具备了聊天室的最基本的功能。 <BR>程序在VC++ 6.0 下编译通过,在使用 TCP/IP 协议的
WINDOWS 95/98 <BR>对等局域网和使用 TCP/IP 协议的 WINDOWS NT 局域网上运行良好。 <BR><BR>
<BR><BR>用WINSOCK实现聊天室的VC++程序设计 <BR>罗 杰 <BR>(贵州大学计算机软件与理论研究所)
<BR><BR>摘要:WINSOCK 是在Windows进行网络通信编程的API接口,也是
<BR>Windows网络编程的事实标准。在网络编程中最常用的方案便是客户
<BR>机/服务器模型。本文提出了在客户机/服务器模型下用WINSOCK实现 <BR>Internet中常见的聊天室软件的方案。
<BR><BR>关键词:套接字,WINSOCK,客户机/服务器,网络编程 <BR>一、SOCKET简介
<BR>80年代初,美国政府的高级研究工程机构(ARPA)给加利福尼亚大
<BR>学Berkeley分校提供了资金,让他们在UNIX操作系统下实现TCP/IP协
<BR>议。在这个项目中,研究人员为TCP/IP网络通信开发了一个API(应用
<BR>程序接口)。这个API称为Socket接口(套接字)。今天,SOCKET接口
<BR>是TCP/IP网络最为通用的API,也是在INTERNET上进行应用开发最为通 <BR>用的API。
<BR>90年代初,由Microsoft联合了其他几家公司共同
<BR>制定了一套WINDOWS下的网络编程接口,即WindowsSockets规范。它是
<BR>BerkeleySockets的重要扩充,主要是增加了一些异步函数,并增加了
<BR>符合Windows消息驱动特性的网络事件异步选择机制。WINDOWSSOCKETS
<BR>规范是一套开放的、支持多种协议的Windows下的网络编程接口。从
<BR>1991年的1.0版到1995年的2.0.8版,经过不断完善并在Intel、
<BR>Microsoft、Sun、SGI、Informix、Novell等公司的全力支持下,已成
<BR>为Windows网络编程的事实上的标准。目前,在实际应用中的
<BR>WINDOWSSOKCETS规范主要有1.1版和2.0版。两者的最重要区别是1.1版
<BR>只支持TCP/IP协议,而2.0版可以支持多协议。2.0版有良好的向后兼容
<BR>性,任何使用1.1版的源代码,二进制文件,应用程序都可以不加修改地 <BR>在2.0规范下使用。
<BR>SOCKET实际在计算机中提供了一个通信端口,可以通过这个端口
<BR>与任何一个具有SOCKET接口的计算机通信。应用程序在网络上传输,接
<BR>收的信息都通过这个SOCKET接口来实现。在应用开发中就像使用文件句 <BR>柄一样,可以对SOCKET句柄进行读,写操作。
<BR>二、基于WINDOWS SOCKET的应用开发介绍。
<BR>在WINDOWS95/98,WINDOWSNT进行WINSOCK开发使用的编程语言有很多,
<BR>VC++,JAVA,DELPHI,VB等。其中VC时使用最普遍,和WINSOCK结合最
<BR>紧密的。并且VC++对原来的WindowsSockets库函数进行了一系列封装,
<BR>继而产生了CAsynSocket、CSocket、CSocketFile等类,它们封装着
<BR>有关Socket的各种功能,是编程变得更加简单。但如果你是一个
<BR>WINSOCK编程的初学者,那么建议你在一开始还是学习WINSOCK最基本的
<BR>API函数进行编程,这样可以大大加深对WINSOCK的了解,对将来很有好 <BR>处。
<BR>在VC中进行WINSOCK的API编程开发,需要使用到下面三个文件: <BR>1、WINSOCK.H: 这是WINSOCK
API的头文件。 <BR>2、WSOCK32.LIB: WINSOCK API连接库文件。在使用中,一点要把它作为项目
<BR>的非缺省的连接库包含到项目文件中去。 <BR>3、WINSOCK.DLL:
WINSOCK的动态连接库,位于WINDOWS的安装目录下。 <BR>WINSOCK接口在WINDOWS编程环境中的位置如下图所示:
<BR><BR><BR><BR>可以看到,WINSOCK。DLL位于TCP/IP协议栈和应用程序之间。也就
<BR>是说,WINSOCK管理与TCP/IP协议的接口。在一开始WINSOCK的应有开
<BR>发时,你不必对TCP/IP协议有很深刻的了解。但是,如果想成为一个为 <BR>网络编程的高手,就一定要对下层了解得十分清楚。
<BR>在网络编程中最常用的方案便是客户机/服务器模型。在这种方案中
<BR>客户应用程序向服务器程序请求服务。一个服务程序通常在一个众所周
<BR>知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,
<BR>直到一个客户对这个服务的地址提出了连接请求。在这个时刻,服务程
<BR>序被“惊醒”并且为客户提供服务-对客户的请求作出适当的反应。虽
<BR>然基于连接协议(流套接字)的服务是设计客户机/服务器应用程序时的
<BR>标准,但有些服务也是可以通过无连接协议(数据报套接字)提供的。 <BR>其编程模型分别如下:
<BR><BR>面向连接协议的SOCKET编程模型
<BR><BR><BR>=======================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -