⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serverunit.~pas

📁 TCPSocket通信编程 TCPSocket编程的简单实例
💻 ~PAS
字号:
unit ServerUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, ScktComp, ExtCtrls;

type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;      //服务器Socket控件
    StringGrid1: TStringGrid;          //显示已经连接的客户地址
    Memo1: TMemo;                      //显示各种信息
    Label1: TLabel;                    //提示正在听
    StringGrid2: TStringGrid;          //显示当前的客户地址
    Label2: TLabel;                    //显示已经连接的客户数
    Label3: TLabel;                    //提示当前的客户情况
    Label4: TLabel;                    //显示端口号
    Timer1: TTimer;                    //时钟定时刷新信息
    Memo2: TMemo;                      //发送信息编辑器
    Button1: TButton;
    Label5: TLabel;                  //发送按钮

    procedure ServerSocket1Accept(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure FormShow(Sender: TObject);
    procedure ServerSocket1ClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    procedure ServerSocket1Listen(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Timer1Timer(Sender: TObject);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ServerSocket1Accept(Sender: TObject;
  Socket: TCustomWinSocket);                       //服务器接收客户事件
begin
    memo1.Lines.Add(Socket.LocalAddress+' Accept');  //提示所接收的客户地址
      with stringgrid2 do                            //显示其它相关情况
         begin
         Cells[1,2]:=Socket.LocalHost;               //显示当地计算机的名称
         Cells[1,3]:=Socket.LocalAddress;            //显示当地计算机的IP地址
         Cells[1,4]:=Socket.RemoteHost;              //显示远方计算机的名称
         Cells[1,5]:=Socket.RemoteAddress;           //显示远方计算机的IP地址
         end;
end;
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);                        //客户连接事件
begin
memo1.Lines.Add(Socket.LocalAddress+' Connect');    //显示客户连接

end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);                       //客户收到数据的事件
  var ss:string;                                   //定义临时变量
      txl:integer;
      ClientAddr:string;
begin
      with stringgrid2 do
         begin
         Cells[1,2]:=Socket.LocalHost;            //显示当地计算机的名称
         Cells[1,3]:=Socket.LocalAddress;         //显示当地计算机的IP地址
         Cells[1,4]:=Socket.RemoteHost;           //显示远方计算机的名称
         Cells[1,5]:=Socket.RemoteAddress;        //显示远方计算机的IP地址
         end;
   with ServerSocket1.Socket do                   //应答客户
      begin
      ClientAddr:=Socket.RemoteAddress;           //得到客户 IP地址
      txl:=Socket.ReceiveLength;                  //得到客户送来的数据长度
      label1.Caption:=' 字节数'+inttostr(txl);
      ss:=Socket.ReceiveText;                     //得到客户送来的数据
      memo1.Lines.Add(timetostr(now)+'收到客户'+
         ClientAddr+'  '+inttostr(length(ss))+'字节数据');
                                                  //显示客户送来的数据时间
      memo1.Lines.Add(ss+'*!!*');              //显示客户送来的数据
      Socket.SendText(timetostr(now)+'收到客户'
           +ClientAddr+'  '+inttostr(txl)+'字节数据如下:');
                                                  //给客户返回信息
      Socket.SendText(ss+'   *!!*');              //返回客户数据让客户验证
      end;

end;

procedure TForm1.FormShow(Sender: TObject);
begin
   ServerSocket1.Port:=2222;                   //设置端口号
   ServerSocket1.Active:=true;                 //启动服务器
   stringgrid1.rowcount:=3;                    //初始化提示信息架构
   stringgrid1.Cells[0,0]:='序号';
   stringgrid1.Cells[1,0]:='Addr';
   with stringgrid2 do
      begin
      Cells[0,0]:='项目';
      Cells[1,0]:='测试值';

      Cells[0,1]:='ReceiveText';
      Cells[0,2]:='LocalHost';
      Cells[0,3]:='LocalAddress';
      Cells[0,4]:='RemoteHost';
      Cells[0,5]:='RemoteAddress';

      end;
   Label4.Caption:='Port: '+ inttostr(ServerSocket1.Port);
end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);                      //客户断开事件
begin
memo1.Lines.Add(Socket.LocalAddress+' 断开');     //显示客户断开
end;

procedure TForm1.ServerSocket1ClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;    //客户出错事件
  var ErrorCode: Integer);
begin
memo1.Lines.Add(Socket.LocalAddress                     //显示错误代码
     +'  e1:'+inttostr(ErrorCode)+'  e2:'+inttostr(ErrorCode));
end;

procedure TForm1.ServerSocket1Listen(Sender: TObject;
  Socket: TCustomWinSocket);                         //听状态事件
begin
memo1.Lines.Add('服务器已经准备好');                 //显示提示信息

end;

procedure TForm1.Timer1Timer(Sender: TObject);       //时钟定时刷新连接信息
  var i,mm:integer;
begin
mm:=ServerSocket1.Socket.ActiveConnections;          //获得所连接的客户数
label2.Caption:='已连接'+inttostr(mm)+'客户';        //提示已连接的客户
if mm=0
then begin
     stringgrid1.RowCount:=2;                     //客户连接数为0时显示无连接
     stringgrid1.cells[0,1]:='';
     stringgrid1.cells[1,1]:='(无客户)';
     end
else begin
    stringgrid1.RowCount:=mm+1;
     for i:=0 to mm-1 do                         //显示所有已连接的客户地址
        begin
        stringgrid1.cells[0,i+1]:=inttostr(i);
        stringgrid1.cells[1,i+1]:=ServerSocket1.Socket.Connections[i].RemoteAddress;
        end;
     end;

end;
procedure TForm1.Button1Click(Sender: TObject);     //发送信息
var i:integer;
begin                                               //向每个已连接的客户发送
for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do
    ServerSocket1.Socket.Connections[i].SendText(memo2.Text);
label5.Caption:='字符数'+inttostr(length(memo2.text));   //显示发送字符数
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -