TCP/IP协议组中存在的两个基本数据服务是:字节流服务和数据报服务,使用字节流的协议将信息看作一串字节流进行传输。协议不管要求发送或接收数据的长度和传送数目,只是将数据看作一个简单的字节串流。使用数据报的协议将信息视作一个独立单元进行传输。协议单独发送每个数据报——数据报之间不相互依赖。例如,假设你使用字节流协议发送5个数据段(每个有10字节)和一个包含50字节的数据段(总共100字节)。连接的接收方可以按每次20字节读数据(要读5次)。传输控制协议是字节流协议。
字节流协议不关心每个数据段的长度。如果应用程序使用字节流协议发送数据,则协议能够保证连接的另一端按照发送的顺序接收数据。相比之下,传输到同一目的地的多个数据报可能不会按发送顺序到达。如果接收方应用程序要求数据顺序一致,应用程序必须在数据到达后,校对这些数据。用户数据报协议和互连网协议使用数据报传输数据。数据报类似于信件。如果你在同一天给同一个人邮寄两封信,你无法知道那个人先收到那封信。同样,如果连续两天给两个人邮信,你也不能知道哪封信先收到。收到信的顺序和发送顺序可能相反。
在TCP/IP术语中,端口类(Port)似于IP地址,IP地址与主机地址是相联系的,端口和协议相联系。IP数据报保存目的和源IP地址,同样传输协议也保存源和目的端口号。如果端口这个概念对你来说很陌生,请考虑计算机上的硬件端口。你可能编写过往硬件端口送数据的程序。例如为了打印,如果没有其它程序的话,必须向串或并端口发送数据。PC机给它的端口命名和编号。
例如,PC机的并行打印端口称为LPTl和LPT2,串行端口称为COM1和COM2。在Internet上,网络只是简单地对协议端口编号。在PC机,LPT1表示并行端口1。成千个PC机应用程序使用此方案。多年来,程序员编写PC程序时都假定LPT1表示并行打印端口1。同样,程序员将每个Internet协议端口与一个特定的应用程序和功能联系在一起。
Internet包括像FTP、Telnet和Mail这样广泛使用的应用程序采用的应用协议,在Internet上,这些应用程序使用一种叫做“通用口分配”的端口。通用口分配是特定应用程序广泛使用的一个协议端口。像PC程序员使用打印端口LPT1用于打印,Internet程序员也对具体应用程序使用许多协议端口。例如,平凡文件传输协议(FTP)的通用口分配是端口号21的。Telnet的通用口分配是端口号23。
§2.2 客户/服务器程序的设计
客户机/服务器模型也是一种网络模型,但与前述的模型不同,它并不是定义了网络的层次结构,而是描述了一种网络程序运行的方式。
客户及/服务器模型将网络应用程序分为客户和服务器两部分。客户方对服务器方发送信息请求,服务器方对其做出相应回答,提供服务。在TCP/IP网络应用中,多数网络应用程序是使用客户/服务器模型设计的。服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户程序提出了请求信息。此时,服务程序被"惊醒"并且为客户提供服务,对客户的请求作出适当的反应。虽然基于连接的服务是设计客户/服务器应用程序的标准,但有些服务也是可以通过数据报Socket提供的。
通常,网络应用程序包含两个独立的应用程序:客户程序和服务器程序。但是,也可以设计同时完成这两种功能的程序,例如,一些服务器程序如果不能完成一个服务请求时,它将转而充当客户程序,向其它服务器程序请求信息。这方面的一个典型例子就是提供Internet从域名到IP地址映射服务的DNS服务器。
为了充分理解TCP/IP协议族,必须理解几个重要术语。这些术语指出了两个TCP/IP传输协议:用户数据包协议(UDP)和传榆控制协议(TCP)之间的区别。这些术语进一步描述了与网络连接、协议可靠性以及数据服务有关的协议特性。
当建立服务器程序时,应该将服务器程序设计成等候客户的请求。你知道,TCP传输层通过协议端口和应用程序 (像服务器和客户)通信,也就是说,为了按收客户请求,服务器程序必须对传输层的一个特定协议端口进行侦听。当服务器配置socket接口时,它使用bind()函数让socket执行体登记一个协议端口。也就是说,程序告诉socket执行体使用哪-个协议端口进行数据传送。Socket执行体接着告诉传输层某个特定协议端口已被使用,并将其收到的所有数据传送给Socket API。
使用无连接协议的程序和使用面向连接协议的服务器程序之间的主要相似之处是它们都必须对一个协议端口进行侦听。例如,无连接和连接服务器程序必须在协议端口侦听客户请求。同样,由于无连接客户程序没有和远地主机建立直接连接,所以它也必须对协议端口进行侦听,以便接收以对它服务请求产生的数据报应答。Socket API中的bind()函数让程序将一个本地地址(包括主机地址和协议端口)和一个Socket联系起来。
下面程序行显示了一个典型的函数调用:
result=bind ( socket_handle, local_structure, socket_address, address_ length)
无连接客户程序也对一个协议端口进行侦听。使用无连接协议的程序不和远地主机建立直接连接。无连接客户程序使用数据报发送网络服务请求,它不建立点到点连接。因此无连接客户程序必须在一个协议端口,对应答数据报进行侦听。与服务器程序一样,无连接客户程序也使用bind函数让Socket执行体登记协议端口。也就是说,类似服务器程序,无连接客户程序告诉Socket执行体使用哪个协议端口进行数据传输。Socket执行体处理传输层内UDP软件模块和客户程序之间的接口。
第 3 章 软件功能与界面需求
提供基于TCP/IP网络的即时消息传送、消息广播、实时聊天、文件传输等功能。 具体列举如下:
支持多账号
可以同时发送同一个消息给多人,通过输入这些人的号码列表或姓名列表
可以同时发送一个消息给所有好友
有权限的人可以向所有用户发送“消息广播”,便于消息的发布
即使用户不在线,也能通过服务器发送离线消息
提供消息、聊天的历史记录,方便对信息的查看和管理
提供查看在线的人的功能
提供按ID或姓名查找用户的功能,添加用户方便
小窗口显示,不占用屏幕很大的空间,
支持热键调出后台的应用程序。
应用程序运行后,在任务栏右边生成一个图标,单击弹出在线状态 菜单,双击显示应用程序窗口,右击弹出主菜单。
支持隐身登陆,可以看到在线的朋友,朋友却不知道你
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 2/17/17
免费vc++网上寻呼QICQ源代码(附带文档)(二)由毕业论文网(www.huoyuandh.com)会员上传。