二 实现网络聊天程序的方法与实践
2.1.实现方法: 【相关文章:refactoring Patterns】 【扩展阅读:refactoring Patterns】 (1)用winsock编程实现: 【扩展信息:refactoring Patterns】 socket原来是unix的berkeley software distributiion版本中的一个程序接口。他类似于c的函数库。简单地说,winsock是定义于视窗应用程序与网络之间的标准界面。程序设计者发现在发展视窗的网络应用软件时,只要支持winsock界面的标准规格,就不再需要顾虑所使用的网卡硬件部分,因为winsock所提供的动态连接程序库(ws2_32.dll)会完成网络底层沟通的工作。进而使得程序设计这能设计出更多功能或更友善的网络软件。 (2)用mfc socket编程实现: 用winsock编程实现,使用的是windows socket api函数编程具有实用灵活的特点,但对于缺乏基本网络知识的初学者来说可能麻烦一点,鉴于此,microsoft公司特地编写了连个基本的socket类即casyncsocket与csocket类。同时为了建化接收与发送数据部分,在mfc中环体的提供了csoketetfile类(以及内置了一个csocketwnd类)。 2.2.实现算法: 现在最通用与流行的网络编程模式就是c/s模式,服务器是能过提供某种或某些功能的程序或进程;客户机使用互相使用服务器进程的某种或某些功能的程序或进程。在c/s模式中,应首先启动服务器进程,然后客户机通过网络访问服务器资源,以完成相应的操作。 通常的网络通信有两种方式,这里主要是针对传输层而言,即:面向连接方式,如采用tcp协议;面向无连接方式,如udp协议 。但有时为了编程方便,在使用udp协议是采用面向连接的处理方式。 另外针对如何处理网络请求网络程序又可分为可交互式与同步式。交互式的特点是编程简单,不容易出错,但执行效率不高;并发式相对复杂,不容易控制,但执行效率较高。对于并发的实现有很多种方式,其中主要的两种是: 1.创建线程为客户机服务。 2.使用事件驱动方式。在一个线程内可以通过异步i/o操作方式,当有事件发生时,就触发相应的过程来处理。 (1)用winsock编程算法: 1.面向连接方式(tcp协议) 服务器端: <1>首先使用wsastartup函数来初始化网络环境。 <2>调用socket(af_inet,sock_stream,0)函数来创建一个套接字。 <3>调用bind函数将本地地址与刚建立的套接字关联起来。 <4>调用listen函数监听发向该套接字的连接请求。 <5>客户端的连接请求放在连接请求队列里,服务器调用accept函数从连接请求队列 中取出第一个请求,创建一个为之服务的新的套接字,该套接字处理所有与该客户交互操作的信息。而服务器进程的监听套接字这时继续处理来自其他客户的连接请求,直到因队列空而等待新的连接请求的到来。 <6>调用closesocket()关闭监听套接字,释放套接字资源。 <7>调用wsacleanup函数释放相应资源。 客户端: <1>首先使用wsastartup函数来初始化网络环境。 <2>调用socket(af_inet,sock_stream,0)函数来创建一个套接字。 <3>调用connect函数连接远程服务器,以请求服务。 <4>服务器相应连接请求后,此时客户端进程开始与服务器的交互操作,直到请求结束 为止。 <5>调用closesocket()关闭监听套接字,释放套接字资源。 <6>调用wsacleanup函数释放相应资源。 2.面向无连接方式(udp协议)
... 下一页