在运行程序时,出现List index out of bound(0)是什么意思
   该如何解决!

解决方案 »

  1.   

    你用得socket套结字没有绑定(没有调用它的绑定函数)或者绑定失败
      

  2.   

    type 
    client_record=record 
    CHandle: integer; //客户端套接字句柄 
    CSocket:TCustomWinSocket; //客户端套接字 
    CName:string; //客户端计算机名称 
    CAddress:string; //客户端计算机IP地址 
    CUsed: boolean; //客户端联机标志 
    end; ....
    session: array[0..CMax] of client_record; //客户端连接数组 在clientconnect事件中
    ... 
    session[j].CSocket := Socket; 
    ...session[j].CSocket := Socket; 是这里出错吗?
      

  3.   

    好像不是数组溢出吧,我现在点击连接按钮就会出错,List index out of bound(0)
    按钮代码:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        ServerSocket1.Open;
    end;
      

  4.   

    我定义的Cmax
     const  
      Cmax=10
      

  5.   

    unit uServerMain; 
    interface 
    uses 
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
    ScktComp, ToolWin, ComCtrls, ExtCtrls, StdCtrls, Buttons; 
    const 
    CMax=10; //客户端最大连接数 
    type 
    client_record=record 
    CHandle: integer; //客户端套接字句柄 
    CSocket:TCustomWinSocket; //客户端套接字 
    CName:string; //客户端计算机名称 
    CAddress:string; //客户端计算机IP地址 
    CUsed: boolean; //客户端联机标志 
    end; 
    type 
    TfrmServerMain = class(TForm) 
    ServerSocket: TServerSocket; 
    ControlBar1: TControlBar; 
    ToolBar1: TToolBar; 
    tbConnect: TToolButton; 
    tbClose: TToolButton; 
    tbDisconnected: TToolButton; 
    Edit1: TEdit; 
    Memo1: TMemo; 
    StatusBar: TStatusBar; 
    procedure tbConnectClick(Sender: TObject); 
    procedure tbDisconnectedClick(Sender: TObject); 
    procedure ServerSocketClientRead(Sender: TObject; 
    Socket: TCustomWinSocket); 
    procedure ServerSocketListen(Sender: TObject; 
    Socket: TCustomWinSocket); 
    procedure ServerSocketClientConnect(Sender: TObject; 
    Socket: TCustomWinSocket); 
    procedure ServerSocketClientDisconnect(Sender: TObject; 
    Socket: TCustomWinSocket); 
    procedure tbCloseClick(Sender: TObject); 
    procedure FormCreate(Sender: TObject); 
    procedure FormClose(Sender: TObject; var Action: TCloseAction); 
    procedure ServerSocketGetSocket(Sender: TObject; Socket: Integer; 
    var ClientSocket: TServerClientWinSocket); 
    procedure ServerSocketClientError(Sender: TObject; 
    Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; 
    var ErrorCode: Integer); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    session: array[0..CMax] of client_record; //客户端连接数组 
    Sessions: integer; //客户端连接数 
    end; 
    var 
    frmServerMain: TfrmServerMain; 
    implementation 
    {$R *.DFM} 
    //打开套接字连接,并使套接字进入监听状态 
    procedure TfrmServerMain.tbConnectClick(Sender: TObject); 
    begin 
    ServerSocket.Open ; 
    end; 
    //关闭套接字连接,不再监听客户端的请求 
    procedure TfrmServerMain.tbDisconnectedClick(Sender: TObject); 
    begin 
    ServerSocket.Close; 
    StatusBar.Panels[0].Text :='服务器套接字连接已经关闭,无法接受客户端的连接请求.'; 
    end; 
    //从客户端读取信息 
    procedure TfrmServerMain.ServerSocketClientRead(Sender: TObject; 
    Socket: TCustomWinSocket); 
    var 
    i:integer; 
    begin 
    //将从客户端读取的信息添加到Memo1中 
    Memo1.Lines.Add(Socket.ReceiveText); 
    for i:=0 to sessions do 
    begin 
    //取得匹配的客户端 
    if session[i].CHandle = Socket.SocketHandle then 
    begin 
    session[i].CSocket.SendText('回复客户端'+session[i].CAddress+' ==> '+Edit1.Text); 
    end; 
    end; 
    end; 
    //服务器端套接字进入监听状态,以便监听客户端的连接 
    procedure TfrmServerMain.ServerSocketListen(Sender: TObject; 
    Socket: TCustomWinSocket); 
    begin 
    StatusBar.Panels[0].Text :='等待客户端连接...'; 
    end; 
    //当客户端连接到服务器端以后 
    procedure TfrmServerMain.ServerSocketClientConnect(Sender: TObject; 
    Socket: TCustomWinSocket); 
    var 
    i,j:integer; 
    begin 
    j:=-1; 
    for i:=0 to sessions do 
    begin 
    //在原有的客户端连接数组中有中断的客户端连接 
    if not session[i].CUsed then 
    begin 
    session[i].CHandle := Socket.SocketHandle ;//客户端套接字句柄 
    session[i].CSocket := Socket; //客户端套接字 
    session[i].CName := Socket.RemoteHost ; //客户端计算机名称 
    session[i].CAddress := Socket.RemoteAddress ;//客户端计算机IP 
    session[i].CUsed := True; //连接数组当前位置已经占用 
    Break; 
    end; 
    j:=i; 
    end; 
    if j=sessions then 
    begin 
    inc(sessions); 
    session[j].CHandle := Socket.SocketHandle ; 
    session[j].CSocket := Socket; 
    session[j].CName := Socket.RemoteHost ; 
    session[j].CAddress := Socket.RemoteAddress ; 
    session[j].CUsed := True; 
    end; 
    StatusBar.Panels[0].Text := '客户端 '+Socket.RemoteHost + ' 已经连接'; 
    end; 
    //当客户端断开连接时 
    procedure TfrmServerMain.ServerSocketClientDisconnect(Sender: TObject; 
    Socket: TCustomWinSocket); 
    var 
    i:integer; 
    begin 
    for i:=0 to sessions do 
    begin 
    if session[i].CHandle =Socket.SocketHandle then 
    begin 
    session[i].CHandle :=0; 
    session[i].CUsed := False; 
    Break; 
    end; 
    end; 
    StatusBar.Panels[0].Text :='客户端 '+Socket.RemoteHost + ' 已经断开'; 
    end; 
    //关闭窗口 
    procedure TfrmServerMain.tbCloseClick(Sender: TObject); 
    begin 
    Close; 
    end; 
    procedure TfrmServerMain.FormCreate(Sender: TObject); 
    begin 
    sessions := 0; 
    end; 
    procedure TfrmServerMain.FormClose(Sender: TObject; 
    var Action: TCloseAction); 
    begin 
    ServerSocket.Close ; 
    end; 
    //当客户端正在与服务器端连接时 
    procedure TfrmServerMain.ServerSocketGetSocket(Sender: TObject; 
    Socket: Integer; var ClientSocket: TServerClientWinSocket); 
    begin 
    StatusBar.Panels[0].Text :='客户端正在连接...'; 
    end; 
    //客户端发生错误 
    procedure TfrmServerMain.ServerSocketClientError(Sender: TObject; 
    Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; 
    var ErrorCode: Integer); 
    begin 
    StatusBar.Panels[0].Text :='客户端'+Socket.RemoteHost +'发生错误!'; 
    ErrorCode := 0; 
    end; 
    end. 
      
     问题是程序能运行,但点击connect按钮就会出错。List index out of bound(0)
      

  6.   

    是不是应该  
    for i:=0 to sessions-1 do
    而不是
    for i:=0 to sessions do