用 Delp hi 编写局域网中 C/S 型聊天程序 中原工学院计算机教研室 夏敏捷 Internet 盛行的今天,网上聊天 QQ 已成为一种时尚。QQ 是深圳腾讯公司的一个网络实时通讯软件,在国内拥有大量的用户群。但 QQ 必须连接上互联网登陆到腾讯的服务器才能使用。所以我们可以自己写一个在局部网里面使用的自己的 QQ。 QQ 使用的是 UDP 协议,这是一种无连接协议,即通信双方不用建立连接就可以发送信息,所以效率比较高。Delphi 本身自带的 FastNEt 公司的 NMUDP 控件就是一个 UDP 协议的用户数据报控件。这里我们编写的局域网上实现聊天的程序采用的是 TCP 协议,TCP是一种面向连接协议,具有较高的可靠性。在 Delphi 中利用 ClientSocket、ServerSocket 这两种控件(Internet 面板上),可以轻松的编写出 C/S 聊天程序,以下的程序在 Delphi 6+winXP中通过。 一、原理 首先建立客户与主机的连接,把要发送的文字信息写进字符串中,然后ClientSocket 组件的 Socket..sendtext 方法把文本发送出去。当主机有数据接收时,触发它的 ServerSocket组件 onClientRead 事件,我们在这里用 socket.ReceiveText 接收字符信息,然后显示出来。主机可以通过Socket..sendtext 方法再将此用户信息转发给所有用户或单独的用户,在数据到达客户端后触发客户端OnRead 事件,接受主机的数据。 为了区分不同的信息(新用户信息、昵称、交谈、用户离开)设计了以下协议格式: 1. 发送添加的新用户信息的格式: “添加用户”@用户的昵称 ^它的 IP@用户的昵称 ^它的 IP@… … @ 此信息中将所有的用户的昵称和它的 IP 均包含在其中,新用户是最后一个。 2. 发送昵称信息的格式: “昵称”@用户的昵称 此信息用于在客户和服务器建立连接后,发送用户的昵称给服务器。而用户的 IP地址可以通过(socket.RemoteAddress)得出。 3. 发送文本对话信息的格式: “交谈”@to 用户的昵称@交谈的内容 4. 发送离开信息的格式: “离开”@离开的用户的昵称 二、客户端: 新建一个工程,在 Internet 面板拖一个 ClientSocket 控件到窗口,然后依次放上一个 EDIT, 一个 ListBox 和一个 RichEdit,两个按钮,一个状态条 StatusBar1。当用户点击“连接主机”按钮时,用户输入服务器主机的 IP 及紧接着自己的昵称。 procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;Shift: TShiftSta...