Delphi-網絡編程-第一個網絡方面作品(UDP聊天程序)


其實這不算是一個聊天程序,因為還不能實現雙方互發信息,只有一方能發信息,呵呵

我以后再改進吧。。。。

服務端代碼:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM