出现list index out of bounds(0)?

出现list index out of bounds(0)? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiNetwork/html/delphi_200612312048352.html
运用Socket编写了一个客户端,不过只能连上和接收服务器的信息,不知道为何不能发送信息,而且在退出时出现这个错误list   index   out   of   bounds(0),究竟该怎么改啊?查了很多资料都不知道该如何下手,请各位帮忙看看  
  unit   Client;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   ScktComp,   StdCtrls,   ComCtrls,   Menus;  
   
  type  
      TfrmClient   =   class(TForm)  
          MainMenu1:   TMainMenu;  
          Cennect:   TMenuItem;  
          DisConnect:   TMenuItem;  
          About:   TMenuItem;  
          Exit:   TMenuItem;  
          SSent:   TMemo;  
          CSent:   TMemo;  
          btSent:   TButton;  
          StatusBar:   TStatusBar;  
          SesInfor:   TGroupBox;  
          Label1:   TLabel;  
          edIP:   TEdit;  
          Label2:   TLabel;  
          EdPort:   TEdit;  
          ClientSocket:   TClientSocket;  
          procedure   CennectClick(Sender:   TObject);  
          procedure   ClientSocketConnect(Sender:   TObject;  
              Socket:   TCustomWinSocket);  
          procedure   CSentKeyDown(Sender:   TObject;   var   Key:   Word;  
              Shift:   TShiftState);  
          procedure   ClientSocketRead(Sender:   TObject;   Socket:   TCustomWinSocket);  
          procedure   ClientSocketDisconnect(Sender:   TObject;  
              Socket:   TCustomWinSocket);  
          procedure   btSentClick(Sender:   TObject);  
          procedure   AboutClick(Sender:   TObject);  
          procedure   ExitClick(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      frmClient:   TfrmClient;  
      ServerSocket:TServerSocket;  
   
  implementation  
  uses   unit2;  
   
  {$R   *.dfm}  
   
  //激活客户端  
  procedure   TfrmClient.CennectClick(Sender:   TObject);  
  begin  
      ClientSocket.Address:=edIP.Text;       //设定IP  
      ClientSocket.Port:=StrToInt(edPort.Text);     //设定端口  
      ClientSocket.Active:=true;  
  end;  
   
  //建立连接  
  procedure   TfrmClient.ClientSocketConnect(Sender:   TObject;  
      Socket:   TCustomWinSocket);  
  begin  
      Statusbar.Panels.Items[0].Text:='成功连接到服务器'+ServerSocket.Name;  
  end;  
   
  //在对话框按回车发送信息  
  procedure   TfrmClient.CSentKeyDown(Sender:   TObject;   var   Key:   Word;  
      Shift:   TShiftState);  
  begin  
      ClientSocket.Socket.SendText(CSent.Lines[CSent.Lines.Count   ]);  
  end;  
  //按发送按钮发送信息  
  procedure   TfrmClient.btSentClick(Sender:   TObject);  
  begin  
      ClientSocket.Socket.SendText(CSent.Lines[CSent.Lines.Count   ]);  
  end;  
   
  //获取服务器的信息以及显示客户端本身发送的信息  
  procedure   TfrmClient.ClientSocketRead(Sender:   TObject;  
      Socket:   TCustomWinSocket);  
  begin  
      SSent.Lines.Add(Socket.ReceiveText);  
  end;  
   
  //断开连接  
  procedure   TfrmClient.ClientSocketDisconnect(Sender:   TObject;  
      Socket:   TCustomWinSocket);  
  begin  
      ClientSocket.Active:=false;  
      Statusbar.Panels.Items[0].Text:='关闭与服务器的连接';  
      CSent.Lines.Clear;  
  end;  
   
   
  //获取软件信息  
  procedure   TfrmClient.AboutClick(Sender:   TObject);  
  begin  
      Form2.Show;    
  end;  
   
  //退出程序  
  procedure   TfrmClient.ExitClick(Sender:   TObject);  
  begin  
      if   ClientSocket.Active   then  
            ClientSocket.Close;  
      frmClient.Close;  
  end;  
   
  end.  
 

(CSent.Lines[CSent.Lines.Count   -   1]);  
 

//按发送按钮发送信息  
  procedure   TfrmClient.btSentClick(Sender:   TObject);  
  begin  
      ClientSocket.Socket.SendText(CSent.Lines[CSent.Lines.Count-1   ]);  
  end;  
   
 

这个错误一般都是操作越界,你以后只要检测一些数组类型之类,或者指针的东西,就行了  
  就如上面2位说的,index是从0开始的,所以你要记得-1就可以了

转载于:https://www.cnblogs.com/delphi2007/archive/2008/08/19/1271272.html

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值