소스는 아래와 같고요
서버버튼를 누르고 내용을 전송하려고 하면 에러가 납니다.
에러 메시지는 이렇습니다.
"List Index out of bounds(0)" 이런 메시지가 나옵니다.
답변 부탁드립니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Label1: TLabel;
GroupBox1: TGroupBox;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Button3: TButton;
Button4: TButton;
Label2: TLabel;
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
procedure Button4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure Memo2KeyPress(Sender: TObject; var Key: Char);
procedure Button2Click(Sender: TObject);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
IsClient : Boolean;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button4Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Clientsocket1.Active := True;
IsClient := True;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Button1.Enabled :=false;
Button2.Enabled :=True;
end;
procedure TForm1.Memo2KeyPress(Sender: TObject; var Key: Char);
var
iValue : Integer;
begin
if key=#13 then
begin
key := #0;
if Isclient then
iValue := Clientsocket1.Socket.SendText(edit1.text+' : '+memo2.text)
else
iValue := ServerSocket1.Socket.Connections[0].SendText(edit1.text+' : '+memo2.text);
memo1.lines.add(edit1.text+' : '+memo2.text);
memo2.lines.clear;
memo2.SetFocus;
memo2.SelStart :=0;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Clientsocket1.Active := False;
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Button1.Enabled := True;
Button2.Enabled := false;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.lines.add(socket.ReceiveText);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
IsClient := False;
Serversocket1.Active := True;
Button1.Enabled := false;
Button2.Enabled := false;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.text :='';
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.lines.add(Socket.ReceiveText);
end;
end.
> var
> iValue : Integer;
> begin
> if key=#13 then
> begin
> key := #0;
> if Isclient then
> iValue := Clientsocket1.Socket.SendText(edit1.text+' : '+memo2.text)
> else
> iValue := ServerSocket1.Socket.Connections[0].SendText(edit1.text+' : '+memo2.text);
>
> memo1.lines.add(edit1.text+' : '+memo2.text);
> memo2.lines.clear;
> memo2.SetFocus;
> memo2.SelStart :=0;
> end;
>
>
>
> end;
>
이 부분이 문제죠...
ServerSocket1.Socket.Connections[0] 이렇게 쓰실려면 ServerSocekt1에 Client 하나가 꼭 연결되어 있어야 합니다. 그렇지 않으면 에러 나지요...
ServerSocket1.Socket.Connections[0] 이거 쓰시기전에
if ServerSocket1.socket.ActiveConnections > 0 then 이라는 문장을 삽입해보세요...
이 때 해당 루틴에 안 들어간다면 연결된 클라이언트가 없는 것이구 들어간다면 에러없이 잘 돌거에요...