Robiąc aplikację serwisową, oparłem ją o TServerSocket i TClientSocket. Ale cos 'zawodzi' ten mechanizm (serwisy zamrazaja porty na komputerze serwera po kilku godzinach dzialania i wymagany jest restart, a na dluzsza mete nie moge stale resetowac serwisow by bylo OK). Wiec chcialbym przekodzic to na TCP z Indy.
Moze ktos ma sprawnie dzialajace(niezawodnie) rozwiazanie oparte na tych kontrolkach ? W necie wiem ze cos jest ale mam ograniczony czas, bedac zawalony innymi rzeczami. Potrzebuje sprawnych metod do: przesylania/odbierania tekstu , obsluge serwera na Disconnect i Connect klientow.
Service Application + Indy bardzo fajnie się programuje jak wiesz oczywiście jak korzystać z Indy.
Tu masz troche info jak sobie z tym poradzić bo nie chce mi się dwa razy o tym samym pisać: http://4programmers.net/Forum/591227?h=#id591227
Gotowców nie dostaniesz. Ja sam troche czasu nad tym spędziłem i jakoś mi się opłaciło.
Osobiście uważam że forum jest po to aby pisać o konkretnych problemach, a nie ogólnie: "dajcie mi to, napiszcie za mnie tamto".
No rzeczywiście pomogłeś, ale skoro takiś pr0 to mam parę pytań:
- W którym zdarzeniu po stronie klienta mam odbierać dane ?
- Po stronie serwera, gdzie jest unikalny HANDLE danego klienta i w jakim zdarzeniu to moglbym obsluzyc(tylko execute?) ?
Tu jest sampel z INDY
procedure TForm1.serwExecute(AContext: TIdContext);
var
lCmd: string;
begin
lCmd := Trim(AContext.Connection.IOHandler.ReadLn);
if AnsiSameText(lCmd, 'HELP') then
begin
AContext.Connection.IOHandler.WriteLn('HELP');
AContext.Connection.IOHandler.WriteLn('QUIT');
AContext.Connection.IOHandler.WriteLn('GETTIMESTAMP');
AContext.Connection.IOHandler.WriteLn('');
end
Odiberanie i wysylanie po tej stronie dziala. Ale jak odroznic kto wyslal, i do kogo odeslac ? w TSocketserver polaczenia z klientami byly stablicowane tak:
Serwer.Socket.ActiveConnections //ilosc podlaczonych klientow
Serwer.Socket.Connections[I].SocketHandle //uchwyty klientow
Serwer.Socket.Connections[I].SendText //wyslanie do odpowiedniego klienta
Wiec jak bys mogl podac odpowiedniki tych trzech powyzszych rzeczy to juz z gorki :-)
Hehe. Wszyscy mają z tym problem. Widać w twoim kodzie wpływ tutoriali i dem do Indy. To droga do nikąd bo potem pojawiają się pytania z serii: jak wysłać to do konkretnego klienta, skąd mam wiedzieć od kogo to przyszło itp. itd.
Tu masz kod źródłowy trojanka do analizy:
http://en.pudn.com/downloads94/sourcecode/hack/trojan/detail372848_en.html
Polecam przeanalizować plik Serwera Unit1.pas i procedurę IdTCPServer1Execute. Wysyłanie komend do Klienta masz w całej reszcie kodu. Polecam bliżej przyjżeć się rekordowi Ponlineinf i jego pole AThread.
Klienta znajdziesz w pliku mainserve.pas i procedure TClientHandleThread.HandleInput chociaż ja osobiście używam własnego wątku i w Excute odbieram komendy przez zwykłe IdTCPClient.ReadLn.
Jak jesteś co najmniej średnio kapujący jeśli chodzi o delphi to znajdziesz tam rozwiącanie swoich problemów z Indy.
Aha. Stronka pudn.com czasem długo odpowiada na zapytania więc cierpliwości.
No dobra, trzeba sie tam zarejestrowac itd, ale mam nadzieje ze dobiore sie do tego sourca.
Co do brania przykladow to coz, jest ubogo zawsze w tych tematach, ale wiedzac te 3 rzeczy co napisalem, nie jest trudne odrozniac do kogo wyslac, ale tu jednak jest troche inaczej niz w TServerSocket, wiec stad moje pytania.
mgyver za bardzo się nie popisałeś z tą stroną. zarejestrowanie nic nie daje trzeba tam wrzucić swoje source i to nie wiadomo ile lub zapłacic za konto vip.
więc moim zdaniem mgyver sieje komercją
Mam nadzieję że mnie ładnie przeprosicie zaraz ;-P bo jak się rozejżysz dobrze to na dole strony zobaczysz pliki *.dfm i *.pas które jakimś cudem otwierają mi się w przeglądarce za friko.
a ja dodałem jednak tylko jedno moje source i teraz mam dostęp do sporej ilosci kodu .
no i sorry nie zwróciłem uwagi na File lista xD
daje za to gorący HOT http://s.pudn.com/search_hot_en.asp?k=%D4%B6%B3%CC%BF%D8%D6%C6+delphi#
No właśnie :-)
Softu troche jest ale wiekszość źródełek jest starawa wiec bardziej do nauki się nadają.