程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 用Delphi編寫局域網聊天程序

用Delphi編寫局域網聊天程序

編輯: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地址加入到網友中即可實現實時聊天了,一個屬於自己版權的聊天程序,就這樣編寫成功了。當然,你可以增加更多的內容,使程序更加的完善,以求更多的功能。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved