其实这不算是一个聊天程序,因为还不能实现双方互发信息,只有一方能发信息,呵呵
我以后再改进吧。。。。
服务端代码:
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