Q&A

  • 채팅구현중 에러...
어느 자료에서 다운받아서 연습중인데....



procedure TfmChatSvr.ServerClientRead(Sender: TObject;



Socket: TCustomWinSocket);



var



command, param, msg, text, t : string;



i : integer;



begin



text := Socket.ReceiveText;



command := GetCommand(text);



param := GetParam(text);



msg := GetMsg(text);







if command = 'connect' then



begin



Personal.add(Socket.RemoteAddress, param);



socket.SendText(EnterMessage);



end



else if command = 'disconnect' then



begin



Personal.Delete(param);



socket.SendText(ExitMessage)



end



else if command = 'msg' then



begin



i := 0;



while true do



begin



try



Server.Socket.Connections[i].SendText(msg);



inc(i);



except



break;



end;



end



end



else if command = 'one' then



begin



i := Personal.GetByUser(param);



Server.Socket.Connections[i].SendText(msg);



Socket.SendText(msg);



end



else if command = 'getinfo' then



begin



for i := 0 to personal.counts - 1 do



socket.SendText(personal.userid[i]+ ' ');



end;



ReDrawGrid;



end;



여기까지가 서버쪽입니다...



연결까지는 잘 되는데, 클라이언트에서 메세지(msg)를 보낼때



'List index out of bounds (1)' 이라는 오류메세지가 나옵니다...



뭐가 잘못됐는지 아무리 봐도 모르겠어여!



클라이언트에서 메세지 보낼땐



Client.Socket.SendText('msg()' + fmUser.edUser.text + ' ' + edChat.text);



요로케 보냈는데, 서버쪽에서 위와같은 에러 메세지가....



1  COMMENTS
  • Profile
    최용일 2001.04.11 00:47
    안녕하세요. 최용일입니다.



    List index out of bounds (1)는 말그대로 인덱스가 범위를 넘어섰다는 것입니다.



    예를 들어 어떤 리스트에 세개의 아이템이 있는데 네번째의 아이템을 접근하려구 할때 이런 에러를 보실 수 있습니다...



    > Server.Socket.Connections[i].SendText(msg);

    > Server.Socket.Connections[i].SendText(msg);

    > socket.SendText(personal.userid[i]+ ' ');



    의심가는 부분의 위의 세줄입니다. i값이 유효범위를 넘어섰는가 확인해보세요...



    ^^ 항상 즐코하세요...



    초짜람니다.. wrote:

    > 어느 자료에서 다운받아서 연습중인데....

    >

    > procedure TfmChatSvr.ServerClientRead(Sender: TObject;

    >

    > Socket: TCustomWinSocket);

    >

    > var

    >

    > command, param, msg, text, t : string;

    >

    > i : integer;

    >

    > begin

    >

    > text := Socket.ReceiveText;

    >

    > command := GetCommand(text);

    >

    > param := GetParam(text);

    >

    > msg := GetMsg(text);

    >

    >

    >

    > if command = 'connect' then

    >

    > begin

    >

    > Personal.add(Socket.RemoteAddress, param);

    >

    > socket.SendText(EnterMessage);

    >

    > end

    >

    > else if command = 'disconnect' then

    >

    > begin

    >

    > Personal.Delete(param);

    >

    > socket.SendText(ExitMessage)

    >

    > end

    >

    > else if command = 'msg' then

    >

    > begin

    >

    > i := 0;

    >

    > while true do

    >

    > begin

    >

    > try

    >

    > Server.Socket.Connections[i].SendText(msg);

    >

    > inc(i);

    >

    > except

    >

    > break;

    >

    > end;

    >

    > end

    >

    > end

    >

    > else if command = 'one' then

    >

    > begin

    >

    > i := Personal.GetByUser(param);

    >

    > Server.Socket.Connections[i].SendText(msg);

    >

    > Socket.SendText(msg);

    >

    > end

    >

    > else if command = 'getinfo' then

    >

    > begin

    >

    > for i := 0 to personal.counts - 1 do

    >

    > socket.SendText(personal.userid[i]+ ' ');

    >

    > end;

    >

    > ReDrawGrid;

    >

    > end;

    >

    > 여기까지가 서버쪽입니다...

    >

    > 연결까지는 잘 되는데, 클라이언트에서 메세지(msg)를 보낼때

    >

    > 'List index out of bounds (1)' 이라는 오류메세지가 나옵니다...

    >

    > 뭐가 잘못됐는지 아무리 봐도 모르겠어여!

    >

    > 클라이언트에서 메세지 보낼땐

    >

    > Client.Socket.SendText('msg()' + fmUser.edUser.text + ' ' + edChat.text);

    >

    > 요로케 보냈는데, 서버쪽에서 위와같은 에러 메세지가....

    >