使用Socket API

上传人:大米 文档编号:457091147 上传时间:2023-03-16 格式:DOC 页数:19 大小:168.50KB
返回 下载 相关 举报
使用Socket API_第1页
第1页 / 共19页
使用Socket API_第2页
第2页 / 共19页
使用Socket API_第3页
第3页 / 共19页
使用Socket API_第4页
第4页 / 共19页
使用Socket API_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《使用Socket API》由会员分享,可在线阅读,更多相关《使用Socket API(19页珍藏版)》请在金锄头文库上搜索。

1、使用Socket API翻译说明本文翻译自英文Wiki部分的Using the sockets API,因为原文较长,所以我将一部分一部分地翻译,同时欢迎大家帮助我一起完成这个任务,并且对我已经翻译的内容作修改和指正。Contentshide 1简介 2有关Socket的服务构架o 2.1什么是socket?o 2.2协议模块o 2.3传输的独立性o 2.4“客户端-服务器”接口 3sockets服务器的主要类 4使用RSocketServ类o 4.1建立一个连接到sockets服务的会话o 4.2预载入协议模块 5使用RSocket类 6主机解析服务o 6.1什么是主机解析?o 6.2使用R

2、HostResolver类o 6.3域名服务(DNS) 7在socket代码中使用活动对象(active objects) 8代码示例: 连接socketso 8.1服务监听类的定义o 8.2做好接收客户端连接的准备o 8.3处理连接请求o 8.4使用有连接的socket 9传输数据o 9.1接收数据 9.1.1使用无连接的sockets 9.1.2使用连接的socketso 9.2发送数据 9.2.1使用未连接的sockets 9.2.2使用连接的sockets 10总结edit简介通过这篇文章我们想为大家带来一些Symbian操作系统的有关sockets API的基本介绍。 本文的读者应该

3、是希望在他们的应用程序中增添socket通信功能的Symbian操作系统的开发者,本文不仅提供了理论介绍,同样给出了可供实践参考的代码范例。本文包含的内容有: 概括介绍了有关socket通信的有关组件。 概括介绍了socket服务架构以及使用两个主要API类RSocketServ和RSocket的使用。 讨论了创建两个终端之间进行通信的过程。 讨论了socket之间通信的不同模式:基于一串数据流的模式以及基于离散消息的模式。 一个如何使用活动对象来进行socket连接的实践范例。edit有关Socket的服务构架本文的一个内容是介绍给大家如何将基于Socket服务的通信功能加入到应用程序中来。

4、尽管如此,计算机通信系统乃是一个十分复杂的系统,本文介绍的基于socket服务的通信仍然是在一个相对比较高级的层次,没有深入底层探讨的话题和技术。要想让socket服务来发挥作用,许多底层支持软件将是必须的。下图说明了socket服务组件在Symbian系统的通信子系统中的哪一层位置,扮演如何一个角色。Symbian OS通信系统组件首先我们来考虑传输层协议。上图的Internet互联网协议和红外协议,从Symbian 6.0之后支持的蓝牙无线通讯技术都在这一层中。当我们谈到Internet协议时,我们其实包括了一个隐式的依赖动作,那就是向ISP(互联网服务提供商)进行拨号连接。因此,如图所示

5、我们可以看到Symbian系统提供了拨号网络接入组件。而在本图中,最重要的的系统组件是电话通信服务组件。最终,我们需要涉及到一个硬件设备,有了硬件我们才可以在选定的网络环境中接收和发送数据。上图的核心部分就是使用Internet协议的拨号接入网络,并且显示了串行通信组件在整个通信系统扮演了如何的角色。串行通信服务组件通过特定的硬件设备驱动,完成了硬件设备与它周围环境的通信。edit什么是socket?那么什么是socket呢? 用一句引自伯克利(Berkeley)UNIX关于socket实现的经典定义来回答就是“socket就是通信终端”。那究竟是什么意思呢?一个socket代表了一条通信通道

6、逻辑上的终端。而实际上讲,socket是物理网络地址和逻辑端口号的一个集合,而这个集合可以向另外一个位置的与他具有相同定义的socket进行数据传输。因为socket是由机器地址和端口号来区分/识别的,那么在一个特定的计算机网络上,每一个socket都是以此方式被唯一识别的。这就使得应用程序可以唯一地去定位网络上的另外一个位置的socket。注意:对于同一台机器上的两个socket,他们是完全具备彼此间进行通信的可能的;在这种情况下,两个socket具有相同的主机地址,但是他们拥有不同的端口号。主机地址和端口号的组合,对于不同协议是不同的。在socket的经典应用中,网络通信使用的是IP(In

7、ternet Protocol)协议,但是实际上socket是支持很多其它协议的,对于这方面的信息稍后会提到。正如我们将会看到的,不管我们选择怎样的通信协议(传输层),我们都可以使用同一种已成熟的socket API来实现通信。edit协议模块如上文所述,socket的经典应用是在TCP/IP协议的计算机网络上,使两个逻辑端点之间展开通信活动。最著名的应用TCP/IP的计算机网络,当然就是Internet了。绝大多数socket系统的实现都限定在了TCP/IP网络的通信上。但是,Symbian系统的socket服务组件,就实现了更多的内容;不仅如此,它还为其他组件提供了支持模块插件协议的基础构

8、架。这就使得Symbian公司和它的开发伙伴们大大延长了socket服务组件以及支持socket的应用程序的应用时间。由于新协议和传输层的引入,支持了新的传输语言或协议的协议组件,从而使得socket服务组件可以随之适应新的应用环境。随着Symbian系统第五版的socket服务组件支持了TCP/IP和红外协议的稽核。在Symbian 6.0版的时候,就增加了蓝牙无线技术和短信息服务插件。协议模块其实就是标准的Symbian系统动态链接库(DLL)。他们都有共同的UID2-KUidProtocolModule(0x1000004A)来表示他们的类型,并且拥有特殊的扩展名*.PRT。一个关于经典

9、系统的方面,就是socket服务对PLP(Psion Link Protocol)协议也是支持的。PLP被用来进行Symbian系统的手机和运行Microsoft Windows的台式或笔记本计算机之间进行通信。PLP的一个应用就是Symbian Connnect - 目前的被用于名为PsiWin的Psion计算机。socket服务组件可以以两种方式加载协议模块: 最通常的做法就是,协议模块会在第一个使用该协议的socket被打开的时候进行加载。 另外一种做法是,应用程序可以显式地加载协议模块。这种做法的一个好处就在于,当协议加载需要一个比较长的时间的时候,应用程序或用户可以得到相应的提示。使

10、用这种方法调用的API在本文的后面将会进行讨论。要说明的几点:一个协议模块可以包含多种协议实现。比如,在TCPIP.PRT模块中,就包含了UDP、TCP、ICMP、IP以及DNS协议的实现。单个协议的实现可以通过位于systemdata.的.esk文件进行映射。而每个协议模块都有一个.esk文件来指定该模块所包含的协议,以及每个协议在插件模块中所处的索引位置。edit传输的独立性上文已经提到,socket服务组件的插件架构特性可以使得新的协议模块在任何时间被安装到一部Symbian系统的手机当中。这个架构可以使得socket服务组件来实现独立传输层的概念。借助于提供一个通用的核心socket

11、API接口,这种架构就可以处理所有一般性数据传输系统的需求,并且通过添加特定协议的协议模块,socket服务组件就可以被广大应用程序开发者来给自己的产品增添通信功能,从而省下了大量的开发通信子系统的时间。随着时间的发展,新的协议逐步登上历史舞台,协议模块都将会为了适应socket接口而被重写。而应用程序开发者,他们只需要增添协议新近引入的属性或者动作,来支持新的协议即可,Socket服务组件便会使用新的协议,借助操作系统底层的通信组件,来完成通信机制,而并不会影响到上层应用程序开发者的接口和开发。总而言之,socket服务组件可以让应用程序开发者在仅仅维护一套核心API接口的情况下,可以借助操

12、作系统的通信子系统来使用多个协议,从而减少了自己的开发工作量以及开发时间。edit“客户端-服务器”接口Symbian系统的一个特点就是它具有一个体积很小的微内核(micro-kernel),因此我们只能把必须和硬件设备交互以及进行主机控制的核心服务放在内核端运行。而另外许许多多的系统服务只能以用户模式的服务器线程的形式运行,通常被称为系统服务器。socket服务组件就是这些系统服务器中的一个,第三方应用程序就借助公开的客户端API,通过该组件完成通信功能。其中最重要的四个类为: RSocketServer: 这个类是用来建立和socket服务组件之间的连接以及获取必要的资源的。在客户端-服务

13、器架构的定义中,该类表示了应用程序与socket服务组件之间建立连接的会话。所有的其他客户端接口类,在使用中都需要一个被打开的本类的实例来进行操作。 RSocket: 这个类表示了一个socket连接。一个标准的应用程序可能会在不同时间的时候,拥有若干个RSocket的实例在同时进行操作。 RHostResolver: 这个类用来提供主机名称解析服务的接口。 RNetDatabase: 这个类用来提供网络数据库访问的接口。RSocket, RHostResolver & RNetDatabase均表示了一个给定的应用程序与socket服务组件之间进行的会话下的子会话,而应用程序与socket服

14、务组件之间的会话就是一个RSocketServer的实例。editsockets服务器的主要类socket服务组件提供了两个主类,供他的客户端访问内部的API。 RSocketServ: 在每个应用程序线程中,只要需要连接socket请求,他就必须使用一个本类的实例,来为其他连接(会话)提供socket服务。 RSocket: 每一个需要使用socket的应用程序线程,同样也需要一个或多个RSocket对象,这些对象就是子会话了。下面的两个部分将会介绍会话和子会话类(RSocketServ 和 RSocket)的详细内容。edit使用RSocketServ类RSocketServ类扮演了一个十

15、分重要的角色,因为它是客户端应用程序与socket服务组建之间的连接会话。但是,客户端应用程序并不直接使用这个类来进行数据的发送和接收,或者创建一个远程通信端点;要完成这些任务的话,使用的是RSocket类,这个类将会在稍后进行介绍。RSocketServ可以让客户端应用程序来向socket服务组件发起一些查询,查询的内容包括服务器支持的协议个数以及支持哪些协议,每个支持协议的具体信息等等。希望使用socket的客户端应用程序,都将需要自己创建一个RSocketServ类的实例对象,用这个对象来表示该客户端应用程序和socket服务之间的会话。每一个独立的socket连接,都是一个独立的RSocket类的实例对象。可以说,在一个客户端应用程序中,该程序的RSocketServ类对象就是所有的RSocket类对象的容器。RSocketServ类的两个常用函数就是Connect()和StandardProtocol()。edit建立一个连接到sockets服务的会话使用Connect()方法,应用程序就可以建立与socket服务之间的一个会话。它仅仅使用一个参数-该会话所提供的消息通道的个数。 TI

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号