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;
這樣,一個簡單的聊天工具就做好了,只要雙方同時運行本程序,且將對方的計算機名稱或IP地址加入到網友中即可實現實時聊天了,一個屬於自己版權的聊天程序,就這樣編寫成功了。當然,你可以增加更多的內容,使程序更加的完善,以求更多的功能。