鱼C论坛

 找回密码
 立即注册
查看: 3347|回复: 2

40课鱼C扫描器clientsocket.port无法赋值!运行出错。

[复制链接]
发表于 2016-8-24 10:09:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 panshow 于 2016-8-26 08:39 编辑

我现在用的DELPHI XE10 版本。clientsocket 和serversocket 都集成到了scktcomp(下载的DELPHI7也没有clientsocket和serversocket)。以下是全部原代码

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.ComCtrls, Vcl.StdCtrls,
  Vcl.DdeMan, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,scktcomp;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Edit4: TEdit;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    ProgressBar1: TProgressBar;
    Label8: TLabel;
    Timer1: TTimer;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    ListBox1: TListBox;
    procedure Panel2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Panel1Click(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Panel3Click(Sender: TObject);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   clientsocket1:Tclientsocket;

implementation

{$R *.dfm}

procedure TForm1.Panel1Click(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.Panel2Click(Sender: TObject);
begin
  if edit1.Text='' then
    showmessage('Please enter a IP')
    else if edit2.Text='' then
    showmessage('Please enter a start port')
    else if edit3.Text='' then
    showmessage('Please enter a end port')
    else if edit4.Text='' then
    showmessage('Please enter a interval')
    else
    begin
      if panel2.Caption='停止' then
      begin
        timer1.Enabled:=false;
        clientsocket1.Port:=StrToInt(edit1.Text);                                //在这一步赋值时候出错了。
        panel2.Caption:='扫描';
        progressbar1.Step:=0;
        edit1.Enabled:=true;
        edit2.Enabled:=true;
        edit3.Enabled:=true;
        edit4.Enabled:=true;
        panel2.Color:=clnavy;
        panel3.Visible:=false;
      end
      else
      begin
      progressbar1.StepBy(-(StrToInt(edit3.Text)));
      clientsocket1.Port:=StrToInt(edit2.Text);
      listbox1.Items.Clear;
      label7.Caption:=edit2.Text;
      progressbar1.Min:=0;
      progressbar1.Max:=(StrToInt(edit3.Text))-(StrToInt(edit2.Text));
      timer1.Interval:=StrToInt(edit4.Text);
      edit1.Enabled:=false;
      edit2.Enabled:=false;
      edit3.Enabled:=false;
      edit4.Enabled:=false;

      timer1.Enabled:=true;
      panel2.Caption:='停止';
      panel2.Color:=clred;

      end;

    end;


end;

procedure TForm1.Panel3Click(Sender: TObject);
begin
  if panel3.Caption='恢复扫描' then
    begin
      timer1.Enabled:=true;
      if timer1.Enabled =true then
        begin
          panel3.Caption:='暂停扫描';
          panel3.Color:=clyellow;
        end;
    end
    else
    begin
      Timer1.Enabled:=false;
      panel3.Caption:='恢复扫描';
      panel3.Color:=cllime;
      progressbar1.Step:=0;
    end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
s,d:integer;
//porty:string;
begin
  if clientsocket1.Port=StrToInt(edit3.Text) then      
    begin
      timer1.Enabled:=false;
      panel2.Caption:='扫描';
      edit1.Enabled:=true;
      edit2.Enabled:=true;
      edit3.Enabled:=true;
      edit4.Enabled:=true;
      panel2.Color:=clnavy;
      panel3.Visible:=false;
      showmessage('扫描完毕!');
    end
    else
    begin
      if clientsocket1.Port=StrToInt(label7.Caption) then
      begin
      d:=clientsocket1.Port+1;
      label7.Caption:=IntToStr(d);
      s:=StrToInt(label7.Caption);
      //porty:=IntToStr(Tclientsocket);    Tclientsocket.port无法调用
      clientsocket1.Address:=edit1.Text;
      clientsocket1.port:=s;
      clientsocket1.open;
      panel3.Visible:=true;
      progressbar1.StepBy(1);

      end;


    end;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
begin
  listbox1.Items.Add('Port'+IntToStr(clientsocket1.port));

  if edit3.Text = label7.Caption then
    begin
      timer1.Enabled:=false;
    end;
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
  Timer1.Enabled:=true;
end;

procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  ErrorCode:=0;
end;

end.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-20 15:50:48 | 显示全部楼层
我用的是delphi7  我也是运行出错了,错误提示:

   工程 Project1.exe 检测到错误类 EConvertErro, 错误信息: '''不是一个有效的整形值'. 进程中止。

用单步调试的时候 是在这一句出错了。

progressbar1.StepBy(1);

不知道什么状况,看好久都没弄明白。
1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-30 15:42:24 | 显示全部楼层
在Delphi菜单Component——Install packages中点add加入C:\Program Files\Embarcadero\Studio\18.0\bindclsockets240.bpl,关闭重新编译即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 06:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表