delphi之socket通讯
2017-01-12 17:47 绿贝 阅读(6331) 评论(0) 编辑 收藏 举报使用了2个组建:
TServerSocket
TClientSocket
------------------TServerSocket---------------------------
//开启连接
ServerSocket1.Port := 9000;
ServerSocket1.Active := true;
//接收客户端发送的消息。对应事件:OnClientRead
Socket.ReceiveText
//发送消息给客户端。
ServerSocket1.Socket.Connections[0].SendText(Edit1.Text);
----------------------TClientSocket---------------------------------------
//连接服务端
ClientSocket1.Host := '127.0.0.1';
ClientSocket1.Port := 9000;
ClientSocket1.Active := true;
//接受服务端发送的消息 。对应事件:OnRead
str := Socket.ReceiveText
//发送消息给服务端。
ClientSocket1.Socket.SendText(Edit1.Text);
下面为完整代码:
unit Client; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, StdCtrls, ExtCtrls, Sockets; type TFrmClient = class(TForm) ClientSocket1: TClientSocket; Memo1: TMemo; Panel1: TPanel; Label2: TLabel; Edit2: TEdit; Button2: TButton; Panel2: TPanel; Label1: TLabel; Button1: TButton; Edit1: TEdit; Label3: TLabel; Edit3: TEdit; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); private { Private declarations } public { Public declarations } end; var FrmClient: TFrmClient; implementation {$R *.dfm} procedure TFrmClient.Button2Click(Sender: TObject); begin if (ClientSocket1.Active = false) then begin ClientSocket1.Host := Edit3.Text; ClientSocket1.Port := strtoint(Edit2.Text); ClientSocket1.Active := true; Self.Caption := '连接socket服务器成功!'; end; end; procedure TFrmClient.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); begin // Memo1.Lines.Add('服务器说:' + Socket.ReceiveText); if (Memo1.Lines.Count > 50) then Memo1.Lines.Clear; Memo1.Lines.Add('服务器:' + ' Ip=' + Socket.RemoteAddress + ' ' + datetimetostr (now)); // Socket.RemoteHost + Memo1.Lines.Add(Socket.ReceiveText); Memo1.Lines.Add(''); end; procedure TFrmClient.Button1Click(Sender: TObject); begin // ClientSocket1.Socket.SendText(Edit1.Text); with ClientSocket1 do begin if Edit1.Text <> '' then begin Memo1.Lines.Add('客户端:' + ' ' + datetimetostr(now)); Socket.SendText(Edit1.Text); Memo1.Lines.Add(Edit1.Text); Memo1.Lines.Add(''); end; end; end; end.
unit server; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ScktComp; type TFrmMain = class(TForm) ServerSocket1: TServerSocket; Memo1: TMemo; Panel1: TPanel; Edit2: TEdit; Label2: TLabel; Button2: TButton; Panel2: TPanel; Button1: TButton; Edit1: TEdit; Label1: TLabel; CheckBox1: TCheckBox; procedure ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocket1ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure Button2Click(Sender: TObject); procedure Edit2Change(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var FrmMain: TFrmMain; implementation {$R *.dfm} procedure TFrmMain.Button1Click(Sender: TObject); begin with ServerSocket1 do begin if Edit1.Text <> '' then begin Memo1.Lines.Add('服务器:' + ' ' + datetimetostr(now)); Socket.Connections[0].SendText(Edit1.Text); // Socket.Connections[0].RemoteAddress;//IP Memo1.Lines.Add(Edit1.Text); Memo1.Lines.Add(''); end; end; end; procedure TFrmMain.Button2Click(Sender: TObject); begin if Edit2.Text <> '' then begin try ServerSocket1.Port := strtoint(Edit2.Text); ServerSocket1.Active := true; Self.Caption := 'Socket服务器待命中,端口:' + Edit2.Text; Button2.Enabled := False; except Self.Caption := 'Socket服务器没有准备好'; end; end; end; procedure TFrmMain.Edit2Change(Sender: TObject); begin Button2.Enabled := true; end; procedure TFrmMain.FormCreate(Sender: TObject); begin Self.Caption := 'Socket服务器'; end; procedure TFrmMain.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add('-----客户端:' + Socket.RemoteAddress + ' 发消息来连接了--'); end; procedure TFrmMain.ServerSocket1ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin ErrorCode := 0; end; procedure TFrmMain.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var stemp: string; begin try if (Memo1.Lines.Count > 50) then Memo1.Lines.Clear; Memo1.Lines.Add('客户端:' + ' Ip=' + Socket.RemoteAddress + ' ' + datetimetostr(now)); // Socket.RemoteHost + Memo1.Lines.Add(Socket.ReceiveText); Memo1.Lines.Add(''); if (CheckBox1.Checked = true) then begin Button1.Click; // Socket.SendText(Edit1.Text); end; except Memo1.Lines.Add(datetimetostr(now) + ' :程序异常'); end; end; end.