• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

delphi之socket通讯

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

使用了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.

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap