出现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.
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就可以了