어느 자료에서 다운받아서 연습중인데....
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);
요로케 보냈는데, 서버쪽에서 위와같은 에러 메세지가....
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);
>
> 요로케 보냈는데, 서버쪽에서 위와같은 에러 메세지가....
>