Delphi 2007 - koniecznie INDY 10 TCP IP wiadomość z serwera do klienta

Delphi 2007 - koniecznie INDY 10 TCP IP wiadomość z serwera do klienta
IN
  • Rejestracja:około 16 lat
  • Ostatnio:ponad rok
0

Witam.

Znalazłem z milion artów i tysiące dem ale w żadnym, nawet w tym przy instalce Delphi nie mogę znaleźć w jaki sposób IdTCPServer1 ma wysyłać tekst do jedynego IdTCPClient1 z którym ma połączenie; było by miło jak wysyłać do jednego z kilku, ale cudów nie oczekuje, po prostu jestem załamany bo już cały dzień z tym walczę.
Przepraszam, znalazłem coś takiego co się kompilowało:

Kopiuj
procedure TForm1.Timer1Timer(Sender: TObject);
// var S: String;
begin
  if IdTCPClient1.Connected then
     if IdTCPClient1.Socket.Readable() then
     begin
        S := Idtcpclient1.Socket.ReadLn;
        MemoKlient.Lines.Add('Z serwera: ' + s);
     end;
end;

procedure TForm1.ButtonSerwerWyslijClick(Sender: TObject);
var Threads : TList;
begin
   if not IdTCPServer1.Active then Exit;

   Threads := IdTCPServer1.Contexts.LockList;
   TIdContext(Threads[0]).Connection.Socket.WriteLn('przykładowa odpowiedz serwera');
end;

ale komunikat się nie wysyłał a program się wieszał.
Byłbym wdzięczny za jakiś konkretny przykład a za jakiś link do dokumentacji tego ustrojstwa tez stokrotne dzięki z góry.

Gdyby nie to że mi się SimpleTCP nie chce zainstalować/ w znaczeniu kompilator nie przyjmuje :( zrobił bym na tym komponencie a tak ... kto mówił, że ma być łatwo :).

Albo może niech się wypowie właściciel np. Delphi 2007, któremu udało się zainstalować stabilna wersję INDY 9 w miejsce niestabilnej ponoć INDY 10.
Jakieś linki do takiej paczki pod D2007, chyba ze trzeba przerabiać to jakiś łopatologiczny kurs, bo tych drzwi sam nie wywarze jeśli mi nikt nie pokażę.

edytowany 2x, ostatnio: Integers
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 5 godzin
0

A zrób to jako dwa osobne programy (serwer i klient) bo w ramach jednej aplikacji może się coś kaszanić.

IN
  • Rejestracja:około 16 lat
  • Ostatnio:ponad rok
0

witam. Niestety bez zmian, fakt że na tym samym komputerze puszczam klienta i serwera, ale we wcześniejszych wersjach nie miało to znaczenia.

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:15 dni
0

W przykładach do Indy masz przykład Chat'a.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
IN
  • Rejestracja:około 16 lat
  • Ostatnio:ponad rok
0

Widziałem, ale będzie mi ciężko wyłuskać samo polecenie które jest potrzebne, nie mniej jednak jeśli nie ma innego wyjścia spróbuje poszukać innych komponentów,
W miedzy czasie kolega polecił mi coś takiego: http://www.ararat.cz/synapse/doku.php/download
komponent o strukturze klasy wymaga trochę obudowania ale mniej zawodny ponoć.
nie mniej jednak temat aktualny może komuś się przyda :)

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 7 godzin
  • Lokalizacja:Koszalin
  • Postów:10094
0

A postaw tam idTCPClient i idTCPServer i TCheckBox.

Kopiuj
if CheckBox1.Checked then 
  begin
    Client.Active := True;
    Server.Active := False;
  end
    else
      begin
        Client.Active := False;
        Server.Active:=True;
       end;

Teraz odpal dwa razy ten program, w jednym zaznacz a w drugim zostaw odznaczony i wtedy się połącz.

Ps; I nie używaj Timera do wyswietlania tekstu, tylko zdarzenia OnRead i tam daj

Kopiuj
 Memo1.Lines.Add(Socket.ReceiveText);
edytowany 1x, ostatnio: Riddle
IN
  • Rejestracja:około 16 lat
  • Ostatnio:ponad rok
0

Miałem przerwę.. ale jestem.

TomRiddle niestety w tych komponentach nie ma własności OnRead. Na wszelki wypadek wstawiłem blokadę ze jak serwer się włączy to wcześniej klient jest DisConnect.
Niestety serwer nadal nie wysyła do klienta. Może jakiś sposób na to jak sprawdzić listę klientów, bo ja wysyłam do klienta nr 0, a może to nie ta pozycja?

cosmoo
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 4 lata
0

A dlaczego nie zrobisz tego w prostszy sposób na podstawie komponentów TServerSocket i TClientSocket?
Przerabiałem to już pare razy i nie ma problemu z wysyłaniem do jednego clienta lub wielu.

IN
  • Rejestracja:około 16 lat
  • Ostatnio:ponad rok
0

W Delphi 2007 nie ma już komponentów TServerSocket i TClientSocket, jest tylko pakiet Indy10

cosmoo
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 4 lata
0

są, ale nie są domyślnie podpięte ;) poniżej masz opis ;)
http://support.codegear.com/article/36470

edytowany 1x, ostatnio: cosmoo
IN
  • Rejestracja:około 16 lat
  • Ostatnio:ponad rok
0

no to działam i spróbuję, dzięki :), a orientujesz się może (bo jeszcze nie doszedłem do tego etapu) czy ten lub jakikolwiek inny komponent wystarczy, żeby połączyć dwa kompy (jeden w Krakowie a drugi w Szczecinie) przez internet, czy trzeba jakichś dodatkowych zabiegów.
Pytam bo tymczasowo zrobiłem pod Delphi5 udało mi się zrobić komunikację na SimpleTCP ale przez internet i podanie samego IP Hosta nie łączą się,
chat działa tylko jeśli uruchomię dwie kopie na tym samym kompie (sieci lokalnej nie posiadam więc nie przetestuje) ale przez net próbowałem połączyć się z kolegą i nie dało rady.

cosmoo
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 4 lata
0

U mnie to działało, dwa kompy podpięte do neostrady komunikowały się, trzeba tylko było przekierować porty na router'ach.

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 5 godzin
0

Co najmniej jeden (ten do którego próbujesz się połączyć) musi mieć zewnętrzne IP lub odpowiednio przekierowany port.

IN
  • Rejestracja:około 16 lat
  • Ostatnio:ponad rok
0

Ha, czyli jak ja mam Neostradę i teoretycznie stałe IP stałe IP (sprawdzałem kilka krotnie wyłączając LiveBoxa ) to powinienem dać np. port nie dowolny w stylu 1234 tylko jakiś konkretny?

edytowany 1x, ostatnio: Integers
cosmoo
  • Rejestracja:około 19 lat
  • Ostatnio:ponad 4 lata
0

Jeśli masz livebox'a to zarejestruj się tu http://www.dyndns.com/ wtedy będziesz mógł na livebox'ie ustawić dyndns'a i nie będziesz potrzebował sprawdzać ip, wtedy będziesz podawał tylko nazwę dns np. "integers.dyndns.org" a livebox sam będzie aktualizował ip pod tą nazwą.

Przekieruj sobie port np. 8999 na ip swojego kompa w sieci lan i będzie śmigało ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.