AIR2.0入门教程: ServerSocket -(2) ServerSocket

ServerSocket实际上是我们上文 说过的TCP/IP协议中的一部分 协议内容封装的编程接口。

ServerSocket概念解释

在TCP/IP协议中,互相通讯要有两方。我们叫做服务端和客户端。一般来讲,由客户端发起一个连接请求,服务端接受请求,双方开始通信。一旦互相通信建立起来,就好像双方连接起一个管道,双方随时可以互相发送消息和接受消息。

这里面,由一个稍微特殊的地方,就是,作为服务端的那方,需要等待客户端来连接。就好像两个人走散了的话,其中一方一般待在特定的地点等待另一方到来。否则,如果双方都跑出去互相找,或者都待在一个地方等对方,是永远不会重聚的。

这里,ServerSocket所封装的底层操作就是作为服务的提供端,监听某一个网络端口,等待客户端的连接请求。所以对于ServerSocket,有2个概念我们需要明确一下,这两个概念其实都是为了帮助客户端定位自己要访问的服务的:

1,绑定IP地址:绑定IP地址是为了让客户端能够在浩瀚的互联网上找到提供服务的这台服务器。
所谓绑定地址,就是一个IP地址。一个服务器一般都会有2个以上的网络标识:

  1. 127.0.0.1 这个IP地址代表这台机器自己。只要你的机器安装了IP协议,这个地址就分配给自己。
  2. 另外,有一个或者多个让别的机器能识别的你IP地址。这个地址就有可能是任意的了。比如 192.168.100.2 之类的。
  3. 最后,0.0.0.0 代表任意的一个网络接口。

当你启动一个ServerSocket,你必须指定你要绑定到哪个网络地址上来等待请求。一般情况下,都是绑定到能够标识这台机器的外部IP地址上(也就是上面列出的2),用以对外提供服务。

但是,也有情况下,为了安全考虑,一些网络 服务并不对外提供,仅仅是对本机的其他程序提供服务,比如说你装了一个数据库,数据库通过tcp/ip协议交互数据。那么这时候,出于安全考虑,你不想让 网络上的其他机器访问到这个数据库,而自己又要访问它,你就可以把他绑定到127.0.0.1上。这样,就可以保证只有来自本机的请求,才能访问到。

最后,如果你的电脑上装了好几个网卡,有好几个IP地址,比如为了解决具有中国特色的南北互通问题,你一个网卡接网通机房,一个网卡接电信机房。这 时候,为了方便,你就让你的服务绑定在0.0.0.0这个地址上,这就意味着你有几个网络接口,他就都通通包圆了。都给你监听上,任意一个网络接口上有请 求,都会响应。

 

2,绑定端口

所谓绑定端口,实际上是为了解决一台服务器上标识好几个服务用的。比如说,你这台机器上有http服务,ftp服务等。光指定一个ip地址,等客户 端请求来了,人家怎么知道在你这个机器上,哪个是Http服务,哪个是ftp服务啊? 所以,这个所谓的端口概念,就是给一个服务一个特定的标识号。

当你绑定在某个IP的80端口,客户端请求来了,你就知道,这个请求时来找80端口的,80端口一般式分配给HTTP服务的,这请求就会被分配给监 听80端口的那个程序区处理。如果另外一个客户端请求来了,找21端口,则服务器会把这个请求交给监听21端口的那个程序区处理。

当你自己写一个服务的时候,所谓你监听在某个端口上,实际上就是告诉服务器,如果有找这个端口号的请求,你就转给我。

明确了这个概念以后,我们来总结一下,如果你是一个客户端,你肯定要访问别人的服务的时候,就需要明白了:你要提供一个IP地址,这样才能找到人家 那个服务器,等找到服务器后,还得告诉人家你的端口号,这样人家才能转给要给你提供服务的那个程序。所以,一个IP地址加一个端口号就可以唯一标示一个特 定的服务。

有人说,我在浏览器里面输入www.riameeting.com 的时候,(域名会被解析成一个IP地址)只给了地址,没给端口号,他不是也找到这个提供HTTP服务的程序了吗。 没错,但是,由于HTTP服务在当今太出名了,干脆,一般情况下,你就可以把端口号省略。浏览器就默认你要访问的是HTTP服务,自动去找HTTP服务所 用的80端口。
所以,省略的端口号实际是给用户的一种方便,浏览器在实现这个机制的时候,会自己给加上一个端口号,默认80.
就好比天安门太有名了,一般你找个小一点的地点,得先跟人家说地址,再说具体门牌号。 可是,你问警察叔叔天安门在哪,绝对不需要问人家请问北京市长安街1号(地址瞎编的)在怎么走,直接说天安门即可。

 

Socket的通讯方式

前面说了,一旦客户端提供了IP地址和端口号找到了提供服务的这个程序(也就是你所写的这个程序),通讯就开始了。这个通讯的管道建立后,其实跟在双方连接了一根自来水管子差不多。谁有水,谁就往里灌,水就留到对方去了。只要管道存在,随时都可以互相灌水。

这里,就意味着,只要双方的连接一点建立,就可以随时向对方发送消息。

这里,我们介绍一下ServerSocket的两个比较重要的事件:

Event.Connect

这个事件,就是你开始在某IP地址上监听某端口后,客户端请求来到时,系统将客户请求转给你的时候,触发的事件。也就是说,恭喜你,对方跟你的水管 接上了。你监听到这个事件后,就可以着手准备一下客户有可能要的需求了。当Event.connect发生的时候,你可以接收到一个 ServerSocketConnectEvent,在这个event上,你可以获取到一个socket实例,这个socket,就是代表这个连接的一个 对象。当一个连接被创建好后,你就得到了代表这个连接的对像。

ProgressEvent.SOCKET_DATA

 这个事件,就是我们所说的,当连接建立后,双方就能互相“灌水”了。但是,对于你来说,你现在时服务端的程序员,你的程序不能一直什么都不干,就一直看有没有水罐过来。你可以注册这个事件,让系统告诉你,有水了(消息来了),赶紧接水(接收消息)。

一般情况下,一旦Event.Connect发生,你就可以在这个水管(网络连接-具体来说,就是这个socket对象)上面监听是否有水(消息)灌过来。

我们会在下面一篇文章 里面,附上一个简单的聊天程序。服务端和客户端都由Actionscript写成。这个程序可以给大家说明Socket如何工作。以及在Actionscript中,各种对象又都代表着具体通讯协议中的什么。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值