您的位置:首页 > 理论基础 > 计算机网络

Delphi-网络编程-第一个网络方面作品(UDP聊天程序)

2010-11-16 16:57 627 查看
其实这不算是一个聊天程序,因为还不能实现双方互发信息,只有一方能发信息,呵呵

我以后再改进吧。。。。



服务端代码:

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: