小弟编写了一个实时传送信息软件。遇到一个小问题。
问题:就是客户端与服务端连接上以后,在客户端输入传送的消息后,按回车发送消息!(发送消息是由回车来触发的)问题就出现了(刚编译好时,在本地机上没有出现什么问题,在两台机子上调试时,就出现“list index out of bounds(1)"错误。以后连在本地机上也会出现这样问题。)我怀疑是服务器接受客户端的消息时出现的错误。本程序在win2000和delphi6编译客户端:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, ExtCtrls, ComCtrls, StdCtrls, Buttons;type
  TForm1 = class(TForm)
    M1: TMemo;
    Label1: TLabel;
    edtHost: TEdit;
    edtPort: TEdit;
    btnConnect: TButton;
    bntDisConnect: TButton;
    Button1: TButton;
    Edit1: TEdit;
    S1: TStatusBar;
    Bevel1: TBevel;
    Label2: TLabel;
    Client: TClientSocket;
    Timer1: TTimer;
    procedure btnConnectClick(Sender: TObject);
    procedure bntDisConnectClick(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);    procedure ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
  TotalLen:Integer;
implementation
Uses ShellAPI;
var
   i:real;
{$R *.dfm}procedure TForm1.btnConnectClick(Sender: TObject);
begin
    Client.Address:=edtHost.Text;//指定主机IP
    Client.Port:=strtoint(edtPort.Text);//设置端口
    Client.Active:=true;end;procedure TForm1.bntDisConnectClick(Sender: TObject);
begin
    Client.Active:=False;
    S1.Panels.Items[0].Text:='连接断开';
end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   if key=#13 then
   begin
    Timer1.Enabled:=true;
      if  not Client.Active then
          btnConnectClick(Sender);
      Client.Socket.SendText(Edit1.Text);
      Edit1.SelectAll;
      key:=#0;
   end;
end;procedure TForm1.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
     S1.Panels.Items[0].Text:='已经连接';
     S1.Panels.Items[1].Text:='';
end;procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
   re:pchar;
   sbuf:string;
   relong:integer;begin
   re:=nil;
   while socket.ReceiveLength>0 do
   begin
       //申请内存
       Timer1.Enabled:=false;
       re:=AllocMem(socket.ReceiveLength);
       try
          relong:=socket.ReceiveLength;
          Socket.ReceiveBuf(re^,Socket.ReceiveLength);
          sBuf:=strpas(re);
          Setlength(sbuf,relong);          //计算字节数
          TotalLen:=TotalLen+relong;
          S1.Panels.Items[1].Text:='总接受字数(Byte):'+IntToStr(TotalLen);
          S1.Update;       finally
           freemem(re);
       end;
       M1.Lines.Add(sbuf);
   end;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
     if Client.Active then
        Client.Close;end;procedure TForm1.Button1Click(Sender: TObject);
begin
    ShellExecute(self.Handle,nil,Pchar(Application.EXEname),nil,nil,SW_Normal);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
     edtHost.Text:='192.168.0.19';
     edtPort.Text:='15333';
     TotalLen:=0;
     i:=0;
     //S1.Panels.Items[2].Text:='往返时间'+inttostr(i)+'毫秒';
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
    i:=i+1;
    S1.Panels.Items[2].Text:='往返时间'+floattostr(i)+'毫秒';
end;procedure TForm1.ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  S1.Panels.Items[0].Text:='与主机断开连接';
  S1.Panels.Items[1].Text:='';
  M1.Lines.Clear;
  edit1.Text:='';
end;end.