Jump to content

Archived

This topic is now archived and is closed to further replies.

Adam Koziolek

[INDY] Klient-Serwer (obsługa wszystkich klientów)

Recommended Posts

Witam

Mam dwie aplikacje klient i serwer zbudowane w oparciu o komponenty Indy 9 (IdTCPClient i Server), klient napisany jest raczej dobrze (raczej ; ] ), gorzej z serwerem, który nie obsługuje wielu klientów (z jednym klientem sobie radzi) kombinowałem z AThread.Destroy (w zdarzeniu OnExecute), wówczas rzeczywiście na każdym kliencie wyświetli się komunikat, ale potem taki klient się sypie. Oto kod klienta i serwera:


KLIENT:

[delphi][/delphi]

Ogólnie założenia są takie:
1). Do serwera łączy się wielu klientów jednocześnie;
2) Po połączeniu klienta do serwera, wszyscy klienci w tle cały czas nasłuchują "poleceń" wydanych z serwera (nasłuchują w tle za pomoca timera), jeżeli serwer wyda "komunikat" o okreslonej treści (w przykładzie wyśle tekst call) wówczas klient wykona coś tam (w przykładzie po naciśnięciu buttona na serwerze na wszystkich klientach ma pojawić się komunikat);

Próbuje próbuje i ciągle się krzaczy (działa tylko z jednym klientem, a zwieloma nie)

Bardzo proszę o pomoc, wskazówki, tuning mojego kodu, aby sparwnie obsłużyć połączenie klient-serwer (a właściwie klienci-serwer).

Z góry Dzięx

Share this post


Link to post
Share on other sites
Nie wiem czy dobrze Ciebie zrozumiałem... ale nie powinieneś zrobić czegoś w stylu: [code=Delphi] for i := 0 to IdTCPServer1.Connections.Count - 1 do IdTCPSerKX[WK]S [ ĘN [/code]?

Share this post


Link to post
Share on other sites
IdTCPServer1.Connections niestety nie ma czegoś takiego (Indy 9)

Co do zrozumienia, myślę że ten rysunek dokładnie wyjaśni o co chodzi (obraz wart więcej niż 1000 słów):

Obrazek

Share this post


Link to post
Share on other sites
Ja ze swej strony moge dodac ze w czystym winsocku takie cos jest duzo latwiejsze do zrobienia ;] i nie trzeba uzywac zadnych komponentow wink.gif

Share this post


Link to post
Share on other sites
Z Indy Demos (Chat): [code=Delphi] List := tcpServer.Threads.LockList;
try
for Count H[LHBCBYYXY
FV56VE6ććV7Fw&FTĆ6rW6W@DEQĄĄ1%Ńm
ŃtMŃ4(4(ąą4(tcpServer.Threads.UnlockList;
end;
[/code]

A do obsługi socketów wolę TServerSocket i TClientSocket z ScktComp (chyba w standardzie)

Share this post


Link to post
Share on other sites

×
×
  • Create New...