Witam,
Siedzę już nad tym xxx godzin i nie mogę wyczaić co robie źle.
Program to serwer czatu, wysyłamy do niego wiadomość a on rozsyła ją wszystkim klientom.
Brzmi bardzo prosto, w praktyce też jest proste tyle że nie działa.
Objawy:
Gdy zalogowany jest tylko jeden klient, serwer sprawuje się doskonale.
po dołączeniu drugiego klienta, serwer wysypuje takim komunikatem:
var
List: TStringList;
k:integer;
i,ii,iii,iiii:integer;
idMessage : TIdMessage;
s,b,wiadomosc:string;
zmienna3:pchar;
sprawdzanieloginu,sprawdzaniehasla:integer;
begin
for ii:=0 to ServerSocket1.Socket.ActiveConnections-1 do begin
s:=serversocket1.Socket.Connections[ii].ReceiveText;
if s <> '' then
List := TStringList.Create;
try
zmienna3 := PChar(s);
ExtractStrings(['~'], [],zmienna3 , List);
for iii:=listbox1.items.count-1 downto 0 do
begin
if (list[0]=listbox1.items[iii])and (list[1]=listbox2.items[iii])
then
begin
Memo1.Lines.Add('Użytkownik: '+list[0] + ' IP: ' + Socket.RemoteAddress+' wysyla wiadomosc: '+list[2]);
for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do
serversocket1.Socket.Connections[i].SendText('odbierz~'+list[1]+' > ' +list[2]);
end;
end;
finally
List.Free;
end;
end;
end;
działanie kodu (on Client write):
Z początku program odbiera dane od podłączonych klientów..
Dzieli odebrany ciąg znaków, według znaku "~" którym oddzielane są komendy.
Sprawdza czy wyslany login i hasło zgadzają sie z tymi zapisanymi w listbox1 oraz listbox2
Dopisuje do memo1 informacje o operacji
otwiera pętlę wysyłania wiadomości do czekających klientów...
Na moje oko, jest wszystko poprawnie, nie wiem czemu nie działa :(
Jeżeli potrzebne będzie więcej informacji to proszę pytać...
Proszę o pomoc