Q&A

  • 소켓을 처음 사용하는 초보입니다. 에러좀 잡아주세요 ^^;;;
소스는 아래와 같고요

서버버튼를 누르고 내용을 전송하려고 하면 에러가 납니다.

에러 메시지는 이렇습니다.

"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.

1  COMMENTS
  • Profile
    나그네 2001.08.14 01:02
    > 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;

    >



    이 부분이 문제죠...

    ServerSocket1.Socket.Connections[0] 이렇게 쓰실려면 ServerSocekt1에 Client 하나가 꼭 연결되어 있어야 합니다. 그렇지 않으면 에러 나지요...

    ServerSocket1.Socket.Connections[0] 이거 쓰시기전에

    if ServerSocket1.socket.ActiveConnections > 0 then 이라는 문장을 삽입해보세요...

    이 때 해당 루틴에 안 들어간다면 연결된 클라이언트가 없는 것이구 들어간다면 에러없이 잘 돌거에요...