其實這不算是一個聊天程序,因為還不能實現雙方互發信息,只有一方能發信息,呵呵
我以后再改進吧。。。。
服務端代碼:
unit
Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer, StdCtrls,
ExtCtrls,IdSocketHandle;
type
TCommBlock =
record
// 通訊結構
SenderName,
// 發信方名字
Msg :
string
[
100
];
// 消息
end
;
TForm1 =
class
(TForm)
Memo1: TMemo;
Panel1: TPanel;
Memo2: TMemo;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
LabeledEdit1: TLabeledEdit;
Button1: TButton;
IdUDPServer1: TIdUDPServer;
Button2: TButton;
Button3: TButton;
procedure
IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
procedure
Button1Click(Sender: TObject);
procedure
Button2Click(Sender: TObject);
procedure
Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end
;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure
TForm1
.
IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
//客戶端連接上后觸發的事件
var
Comm : TCommBlock;
begin
AData
.
ReadBuffer(Comm,AData
.
Size);
Memo1
.
Lines
.
Add(Comm
.
SenderName+
':'
+Comm
.
Msg);
end
;
procedure
TForm1
.
Button1Click(Sender: TObject);
//傾聽
begin
IdUDPServer1
.
DefaultPort := StrToInt(LabeledEdit1
.
Text);
IdUDPServer1
.
Active :=
True
;
Button1
.
Enabled:=
True
;
end
;
procedure
TForm1
.
Button2Click(Sender: TObject);
//清空記錄
begin
Memo1
.
Clear;
end
;
procedure
TForm1
.
Button3Click(Sender: TObject);
//關閉
begin
Close;
end
;
end
.
|
客戶端代碼:
unit
Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, IdBaseComponent, IdComponent, IdUDPBase,
IdUDPClient;
type
TCommBlock =
record
// 通訊結構
SenderName,
// 發信方名字
Msg :
string
[
100
];
// 消息
end
;
TForm1 =
class
(TForm)
Panel2: TPanel;
Memo2: TMemo;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
IdUDPClient1: TIdUDPClient;
LabeledEdit3: TLabeledEdit;
Button3: TButton;
Button4: TButton;
procedure
Button1Click(Sender: TObject);
procedure
Button2Click(Sender: TObject);
procedure
Button3Click(Sender: TObject);
procedure
Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end
;
var
Form1: TForm1;
implementation
const
RECIEVETIMEOUT =
5000
;
// 毫秒,連接等待
{$R *.dfm}
procedure
TForm1
.
Button1Click(Sender: TObject);
//連技
begin
IdUDPClient1
.
Host:=LabeledEdit1
.
Text;
IdUDPClient1
.
Port:=StrToInt(LabeledEdit2
.
Text);
IdUDPClient1
.
ReceiveTimeout:=RECIEVETIMEOUT;
end
;
procedure
TForm1
.
Button2Click(Sender: TObject);
//發送
var
Comm:TCommBlock;
begin
Comm
.
SenderName:=LabeledEdit3
.
Text;
Comm
.
Msg:=Memo2
.
Lines
.
Text;
Memo1
.
Lines
.
Add(Comm
.
SenderName+
':'
+ Comm
.
Msg);
IdUDPClient1
.
SendBuffer(Comm,sizeof(Comm));
end
;
procedure
TForm1
.
Button3Click(Sender: TObject);
//關閉
begin
Close;
end
;
procedure
TForm1
.
Button4Click(Sender: TObject);
//清空記錄
begin
Memo1
.
Clear;
end
;
end
.
|
http://www.cnblogs.com/keyvip/archive/2010/11/16/1878713.html