• ACE Tutorial [翻译] 08-page01

    2004-11-29

    Tag:ACE_TAO

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://jnn.blogbus.com/logs/519755.html

    在大多少得IPC程序中,客户端都知道服务器在什么地方。例如一个mail客户端会通过一个包含mail服务器地址的配置文件获得主机所在位置。你的Web浏览器也会根据你所输入的地址信息来”定位”主机位置。

    如果你想写一个服务端应用程序,同时你想把这个应用允许在你的网络中的好几个系统之上。从客户端来看这些实例(应用运行产生的)或多或少是一样的,所以你不想在客户端把所有的服务程序都配置一遍。同样的,如果你希望能够在任何时候添加删除服务器地址,你就不能简单地给客户端发一串地址就能完事的。

    这样,如何让客户端知道服务器的地址呢?

    数据报文可以满足这样的需求。你可以向网络发送一个数据报文,这样任何一个在监听这个端口的服务器都会接收到这个报文。像我们前面所见到的ACE_SOCK_Stream,你可以通过广播搞获取到对方的地址信息。这样,服务器就可以转发回应消息给客户端。对于客户端来说,也可以提出出对方的地址,这样就能知道现在服务器在哪里了。

    在这个教程中,我们将写三个应用:服务器监听数据报,一个向已知的主机发送数据的客户端,一个向整个(子)网发送消息的客户端。在下 一个教程中,我们将介绍如何将服务器写得更加正规。

    Kirthika's abstract:

    在这里,我们将使用datagram socket来实现客户端的服务发现机制。数据报文是采用UDP来进行发送的,这是一个不可靠并且是非面向连接的协议。数据报文一般来说都是比较小,并且不是用来处理服务器与客户端之间非常重要的交互。

    服务器在一个固定的端口等待数据报的道理。在一般情况下,客户端很少将数据报发送到一个指定的服务器端,这样就需要客户端能够发现服务器并且需要客户端能够在她所在的子网通过广播的方式发送数据报。然后,所有在指定接口监听的服务器将接收到相关的数据。同时有合适的服务器来处理消息。请记住,这里没有建立任何可靠的连接。服务器通过recv()方法获得远程客户端的地址,然后与客户端进行通讯。

    这样我们就可以简单的了解一下通过数据报文进行通讯的另一种方式。

    * 事实上,服务器只是可能够获得数据报的。数据报是一个不太可靠的报文。(我所知道的一下操作系统是这样的。)然而,如果网络拥塞不是很厉害,这些数据报就是能够被传递的。你的客户端可能会发送更多的请求,如果在一定的时间上没有任何响应的话。

     


    收藏到:Del.icio.us