用Delphi编写局域网聊天程序

Internet盛行的今天,网上聊天已成为一种时尚。同时,各单位已建成了自己的局域网;能否在局域网上实现聊天呢?可以,网上到处都有这种工具。当然,我们可以拥有自己版权的聊天工具。

User Datagram Protocol (UDP)协议,是一种无连接协议。在Delphi中利用这种协议,可以轻松的编写出聊天程序,以下的程序,在Delphi 5+Pwin98中通过。

打开Delphi,新建Application,放置以下几个控件:Panel1、Panel2,其属性如下:

FORM1.caption:=聊天工具

panel1.align:=albottom

panel2.align:=alclient

然后,放置以下控件:Edit1,ListBox1,Memo1,Button1,Button2,BitBtn1, Nmudp1其主要控件的属性如下:

nmudp1.localport:=8888(可自定义)

nmudp1.remoteport:=8888(与localport相同)

源程序如下:

  unit main;
   interface
   uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   StdCtrls, Buttons, ExtCtrls, NMUDP, Menus, ComCtrls,WinSock; file://增加WinSock
   type
   TForm1 = class(TForm)
   NMUDP1: TNMUDP;
   Panel1: TPanel;
   Panel2: TPanel;
   Label1: TLabel;
   Edit1: TEdit;
   BitBtn1: TBitBtn;
   Memo1: TMemo;
   Panel3: TPanel;
   Panel4: TPanel;
   ListBox1: TListBox;
   Button1: TButton;
   Button2: TButton;
   procedure FormShow(Sender: TObject);
   procedure BitBtn1Click(Sender: TObject);
   procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
                  FromIP: String; Port: Integer);
   procedure Edit1KeyPress(Sender: TObject; var Key: Char);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   private
    { Private declarations }
   public
    { Public declarations }
   end;
   var
   Form1: TForm1;
   ComputerName: array[0..127] of Char;
   implementation
   {$R *.DFM}
   procedure TForm1.FormShow(Sender: TObject);
   var
    sz: dword;
   begin
    sz := SizeOf(Computername);
    GetComputerName(ComputerName, sz);//得到本机的标识
    ListBox1.Items.Clear;
    ListBox1.Items.Add(大家);//在网友清单中,增加"大家"和
    ListBox1.Items.Add(ComputerName);//本机名称
    ListBox1.ItemIndex:=0;
   end;
   procedure TForm1.BitBtn1Click(Sender: TObject);
   var
    MyStream: TMemoryStream;
    TmpStr: String;
    i:integer;
   Begin
    if Edit1.Text<> then file://如果所说的内容不为空,则发送。
     begin
      NMUDP1.ReportLevel := Status_Basic;
      NMUDP1.RemotePort :=8888;//端口为:8888,可以自己定义,但必须与LocalPort相一致。
      if ListBox1.Items[ListBox1.ItemIndex]=ComputerName then
       Edit1.Text:=ComputerName+自言自语道:+Edit1.Text file://如果和自己对话.
      Else
       Edit1.Text:=ComputerName+对+ListBox1.Items[listbox1.itemindex]+说:+Edit1.Text;
       TmpStr :=Edit1.text;
       MyStream := TMemoryStream.Create;
       try
       MyStream.Write(TmpStr[1], Length(Edit1.Text));
       if ListBox1.ItemIndex=0 then
        begin
        for i:=1 to ListBox1.Items.Count-1 do file://如果选择"大家",则对所有的网友发送信息
          begin
            NMUDP1.RemoteHost :=ListBox1.Items[i];//远程主机的名称或地址.
            NMUDP1.SendStream(MyStream);//发送信息.
         End;
       end
       else 如果私聊
        begin
         NMUDP1.RemoteHost :=ListBox1.Items[ListBox1.itemindex]; file://仅对所选中的网友.
         NMUDP1.SendStream(MyStream);
        End;
       finally
       MyStream.Free;
      end;
      Edit1.Text:=;
      Edit1.SetFocus;
     end else
     Edit1.SetFocus;
     end;
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
     NumberBytes: Integer; FromIP: String; Port: Integer);
     var
      MyStream: TMemoryStream;
      TmpStr: String;
     begin
      MyStream := TMemoryStream.Create;
      try
      NMUDP1.ReadStream(MyStream);
      SetLength(TmpStr,NumberBytes);
      MyStream.Read(TmpStr[1],NumberBytes);
      Memo1.Lines.Add(TmpStr); file://显示对话的内容.
      finally
      MyStream.Free;
      end;
     end;
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    var
     MyStream: TMemoryStream;
     TmpStr: String;
     i:integer;
    Begin
     if (key=#13) and (Edit1.Text<>) then file://如果所说的内容不为空,且最后一个按键为"Enter",则发送。
      begin
       NMUDP1.ReportLevel := Status_Basic;
       NMUDP1.RemotePort :=8888;
       if ListBox1.Items[ListBox1.ItemIndex]=ComputerName then
         Edit1.Text:=ComputerName+自言自语道:+Edit1.Text
       else
         Edit1.Text:=ComputerName+对+ListBox1.Items[listbox1.itemindex]+说:+Edit1.Text;
         TmpStr :=Edit1.text;
         MyStream := TMemoryStream.Create;
         try
          MyStream.Write(TmpStr[1], Length(Edit1.Text));
          if ListBox1.ItemIndex=0 then
           begin
            for i:=1 to ListBox1.Items.Count-1 do
             begin
              NMUDP1.RemoteHost :=ListBox1.Items[i];
              NMUDP1.SendStream(MyStream);
             end;
           end
           else
            begin
             NMUDP1.RemoteHost :=ListBox1.Items[ListBox1.itemindex];
             NMUDP1.SendStream(MyStream);
            end;
            finally
            MyStream.Free;
            end;
            Edit1.Text:=;
            edit1.SetFocus;
           end else
            Edit1.SetFocus;
           end;
     procedure TForm1.Button1Click(Sender: TObject);
     var
      InputString:String;
      begin file://增加网友,输入的可以是IP地址或计算机名称。
      InputString:=InputBox(增加人员, IP地址或计算机名, );
      if Inputstring<> then ListBox1.Items.Add(Inputstring);
       ListBox1.ItemIndex:=0;
      end;
   procedure TForm1.Button2Click(Sender: TObject);
    begin file://删除当前选中的网友,但"大家"不能被删除.
     if ListBox1.ItemIndex<>0 then ListBox1.Items.Delete(ListBox1.ItemIndex);
    end;

end.

这样,一个简单的聊天工具就做好了,只要双方同时运行本程序,且将对方的计算机名称或IP地址加入到网友中即可实现实时聊天了,一个属于自己版权的聊天程序,就这样编写成功了。当然,你可以增加更多的内容,使程序更加的完善,以求更多的功能。

时间: 2024-12-21 23:40:20

用Delphi编写局域网聊天程序的相关文章

使用JAVA编写一个聊天程序,要求有图形界面,还有就是要显示联系人,后天就要交作业了,求大神!

问题描述 JAVA编写,聊天程序,有图形界面,还有界面显示联系人,类似于QQ的,但是极简的就行,求大神帮助啊,我后天就要交了,谢谢大神!!!!! 解决方案 解决方案二:网上有源代码--解决方案三:哪里有,我怎么没有找到,帮忙找一下!解决方案四:引用1楼u013335717的回复: 网上有源代码-- 哪里有,我怎么没有找到,帮忙找一下!解决方案五:上大学的时候写过好像还在U盘里趴着呢

Netmsg局域网聊天程序

很早就想做一个类似QQ一样的聊天程序,苦于一直没有时间,再加上觉得网络多点通信比较难做,所以这个想法就搁在一旁.最近二个月学校放假闲着无聊看了一些Tcp/ip,多线程的书,再加上以前的一点C++和VC的基础,就着手做了起来,共化了17天完成了这个程序.它包括服务器端程序NetMsgServer和客户端程序NetMsgClient.通过编程还发现原始的socket(像send,recv等)命令比VC封装好的CScoket速度要快.怎么说呢,程序不小,有3000多行的代码,错误和垃圾代码肯定也不少了

用Delphi编写视频聊天软件

一.引言 我们知道视频聊天软件的关键技术在于采集视频,并实时传输给聊天软件在线的人.对于视频的采集,这里采用微软公司的关于数字视频的一个软件包VFW(Video for Windows).相信很多人对它都很熟习,VFW能使应用程序通过数字化设备从传统的模拟视频源得到数字化的视频剪辑,VFW的一个关键思想是播放时不需要专用硬件.为了解决数字视频数据量大的问题,需要对数据进行压缩,而VFW引进了AVI的文件标准.该标准未规定如何对视频进行捕捉.压缩及播放,仅规定视频和音频该如何存储在硬盘上及在AVI

用Delphi编写Socket通信程序

笔者在工作中遇到对局域网中各工作站与服务器之间进行Socket通信的问题.现在将本人总结出来的TServerSocket和TClientSocket两个组件的基本用法写出来,希望与您分享. ClientSocket组件为客户端组件.它是通信的请求方,也就是说,它是主动地与服务器端建立连接. ServerSocket组件为服务器端组件.它是通信的响应方,也就是说,它的动作是监听以及被动接受客户端的连接请求,并对请求进行回复. ServerSocket组件可以同时接受一个或多个ClientSocke

用Delphi编写清空回收站程序

本程序演示如何通过程序来清空回收站. 向窗体上添加一个TButton组件,它用于激活清空回收站的操作.设计完成的主界面如图1所示. 图1 主界面 首先在程序的implementation段中定义3个常数和一个类型声明,代码如下: const SHERB_NOCONFIRMATION = $00000001 ; SHERB_NOPROGRESSUI = $00000002 ; SHERB_NOSOUND = $00000004 ; type TSHEmptyRecycleBin=function(

用WCF做聊天程序

先看一个截图. 上面的图,各位乍一看,可能会觉得是用Socket编写的聊天程序.告诉你吧,这玩意儿不是用Socket实现,呵呵,当然它的底层肯定与Socket有一定关系,我只说我的代码没有用到socket而已. 那么,除了Socket可以用于通信,还有其他技术吗?有啊,首先,如果你足够强大,用HTTP也行,但HTTP初始化的过程貌似比较慢.那么还有吗?当然了,各位还记得.NET以前有一个很X但又很少被关注的技术--Remoting.用过吧?没用过也没关系,因为它已经有替代品了. 这时候大家肯定想

基于c#用Socket做一个局域网聊天工具_C#教程

程序设计成为简单的服务端和客户端之间的通信, 但通过一些方法可以将这两者进行统一起来, 让服务端也成为客户端, 让客户端也成为服务端, 使它们之间可以互相随时不间断的通信. 考虑到实现最原始的服务端和客户端之间的通信所需要的步骤对于写这样的程序是很有帮助的. 作为服务端, 要声明一个Socket A并绑定(Bind)某一个IP+这个IP指定的通信端口, 比如这个是127.0.0.1:9050, 然后开始监听(Listen), Listen可以监听来自多个IP传过来的连接请求, 具体可以同时连接几

基于java编写局域网多人聊天室_java

由于需要制作网络计算机网络课程设计,并且不想搞网络布线或者局域网路由器配置等等这种完全搞不懂的东西,最后决定使用socket基于java编写一个局域网聊天室: 关于socket以及网络编程的相关知识详见我另一篇文章:Java基于socket编程 程序基于C/S结构,即客户端服务器模式. 服务器: 默认ip为本机ip 需要双方确定一个端口号 可设置最大连接人数 可启动与关闭 界面显示在线用户人以及姓名(本机不在此显示) 客户端: 需要手动设置服务器ip地址(局域网) 手动设置端口号 输入姓名 可连

用Delphi编写安装程序

当你完成一个应用软件的开发后,那么你还需要为该软件做一个规范化的安装程序,这是程序设计的最后一步,同时也是很重要的一步,因为运行安装程序往往是用户做的第一步操作. 很多报刊文章介绍了许多如何利用installshield等工具软件来制作安装程序的方法,这种办法可以很快建立起较常见的安装模式,但用这种办法也有一些不足,如做成的安装程序一般较大:风格较单一:不能灵活的控制启动方式和快捷方式.其实安装程序的的几个运行步骤较固定,我们完全可以自己来编写安装程序.下面就详细介绍如何用DELPHI编写具有自