Delphi开发基于DCOM的聊天室

分布式COM(以下简称DCOM)的出现给我们轻松的创建分布式应用提供了机会;我们可以完全不去理会低级别的Windows Sockets(DCOM通过MS-RPC让客户与对象进行通信,幸运的是要开发COM应用,开发者几乎可以不去理会MS-RPC)而开发出功能强大、偶合性低(功能模块相对独立,很好的发挥了OO的思想)、易于部署的分布式计算系统。

本文我们打算使用DCOM来开发一个局域网聊天室,不仅是作为技术上的研究,实际上我相信这应该也是一个有用的工具。首先我们要对这个聊天室的功能有一个大致的了解:

1、至少这个聊天室应该允许多个局域网用户进行聊天。

2、应该能够有多个话题的子聊天室,用户可以选择进入某个聊天室进行聊天。

3、客户端应该尽量简单(不用配置DCOM),并需要一个服务器端管理所有的交互行为,管理聊天室的数目和相关配置,并做好系统监测和日志记录等。

4、对聊天室功能进行扩展(如悄悄话功能,表情符号等)。根据以上的功能描述,在仔细分析问题以后我们设计出下面的草图:

这篇文章中我们要大致实现这个程序的一个基本的核心,包括IChatManager、TChatRoomManager、TchatRoom,完成一个最基本功能的服务器端,并做一个简单的客户端进行检测。我们的重点是服务器端,因为它将实现聊天室的大部分功能,客户端只是一个十分小巧简单的程序。

由于篇幅关系,我们只列出重要的部分的代码,完整的程序请给我发email。首先来看看我们的IchatManager接口是什么样子:

IChatManager = interface(IDispatch)
['{E7CD7F0D-447F-497A-8C7B-1D80E748B67F}']
procedure SpeakTo(const content: WideString; destid: Integer); safecall;
//客户向指定的房间说话,destid为房间号
function ReadFrom(sourceid: Integer): IStrings; safecall;
//客户从指定的房间读取谈话内容,sourceid为房间号
function ReadReady(id: Integer): Byte; safecall;
//客户检测指定的房间是否已经可以读取谈话内容
procedure ConnectRoom(const UserName: WideString; RoomID: Integer); safecall;
//客户登陆指定房间
procedure DisconnectRoom(const UserName: WideString; RoomID: Integer); safecall;
//客户退出指定房间
function TestClearBufferTag(RoomID: Integer): Integer; safecall;
//客户测试指定房间的缓冲区的清空与否状况
end;
再来看看接口的实现类TChatManager部分:
type
TChatManager = class(TAutoObject, IChatManager)
protected
function ReadFrom(sourceid: Integer): IStrings; safecall;
//在这里我们使用Delphi扩展的复杂类型TStings,为了让COM支持这种
//类型,delphi提供了IStrings接口
procedure SpeakTo(const content: WideString; destid: Integer); safecall;
function ReadReady(id: Integer): Byte; safecall;
//用来提供给客户端查询指定的房间是否可读,既指定房间缓冲区是否为空
procedure ConnectRoom(const UserName: WideString; RoomID: Integer);
safecall;
procedure DisconnectRoom(const UserName: WideString; RoomID: Integer);
safecall;
function TestClearBufferTag(RoomID: Integer): Integer; safecall;
end;

时间: 2024-10-30 14:59:02

Delphi开发基于DCOM的聊天室的相关文章

与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室

原文:与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室 作者:webabcd 介绍与众不同 windows phone 7.5 (sdk 7.1) 之通信 实例 - 基于 Socket TCP 开发一个多人聊天室 示例1.服务端ClientSocketP

与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室

原文:与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室 作者:webabcd 介绍与众不同 windows phone 7.5 (sdk 7.1) 之通信 实例 - 基于 Socket UDP 开发一个多人聊天室 示例1.服务端Main.cs /* *

用ASP程序组建基于WWW的聊天室

程序|聊天室|聊天室 在网上的各种实时联络方式中,基于WWW的聊天室恐怕是最方便的了:它只需一次性地在服务器端安装成功,客户端使用Windows自带的IE浏览器就可以随意访问了,而不再另外添加第三方软件. ASP程序聊天室V2.5就是这样一款由ASP程序编制成的基于WWW的聊天室服务器端软件,作者是江苏省东台市的姜军,为简体中文版的共享软件(注册费用是给作者寄一张贺卡或5元钱去),功能较齐全,支持用户注册.资料修改.分用户等级(以用户在线总时间来分).私聊.留言.发言的历史记录.新留言提示.禁止

php+html5基于websocket实现聊天室的方法_php技巧

本文实例讲述了php+html5基于websocket实现聊天室的方法.分享给大家供大家参考.具体如下: html5的websocket 实现了双向通信,折腾了几天弄了个聊天室,分享给大家 <?php error_reporting(E_ALL); ob_implicit_flush(); $sk=new Sock('127.0.0.1',8000); $sk->run(); class Sock{ public $sockets; public $users; public $master;

基于PHP的聊天室(二)

聊天室 < ?php // 打开文件,并且将文件长度截为0 $open_file = fopen("messages.html", "w"); // 写入文件的头信息 fputs($open_file, $header); // 新的一行 // (使用stripSlashes,因为我们不想让所有的转义字符出现在消息文件中) fputs($open_file, stripslashes($new_message)); // 旧的行 fputs($open_fil

基于PHP的聊天室(一)

聊天室 从前有一个相当流行的web聊天室,叫做Star Trekker 聊天室.我能够来到这个聊天室要感谢我的一个朋友,并且即使Star Trekker的聊友们几乎与我不是同一个圈中的,但是我发现对于他们的大部分人来说,都很友好和有意思.但是当Star Trekker关闭之后,这不得不谢谢运行在后台的Perl了,是它吞掉了服务器的资源,所以这些快乐和友善的人们不得不离开,无处可去了.我有幸在那段时间开张了自已的仿Star Trekker的聊天室,并且开始设法与许多原来的Trekker的那些无家可

基于PHP的聊天室编程思想

编程|聊天室 1 页面登陆的基本要素你可以在我的竹叶看到登陆 的表单,这里提供了最基本的登陆表单项(1)登陆表单<form method=POST name=chatform action=chat/login.php?action=enter onSubmit="b1_submit();return true;" target="howtodo">(a)聊天表单的名字为chatform,我使用action=enter作为进入聊天室的入口,如果没有这个参

基于PHP的聊天室(三)

现在我们有了需要通过$REMOTE_ADDR变量来交叉引用的文件,这样我们可以区分出想要发贴的用户是否已经被扁或没有被扁.很简单: <?php for ($counter=0;$counter<sizeof($banned_array);$counter++) {    if ($banned_array[$counter] == $REMOTE_ADDR) {        print("<font color="red" face="arial

Android 基于Socket的聊天室实例_Android

Socket是TCP/IP协议上的一种通信,在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路.一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信. Client A  发信息给 Client B ,  A的信息首先发送信息到服务器Server ,Server接受到信息后再把A的信息广播发送给所有的Clients 首先我们要在服务器建立一个ServerSocket ,ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待