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

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:

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żę.

0

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

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.

0

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

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 :)

0

A postaw tam idTCPClient i idTCPServer i TCheckBox.

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

 Memo1.Lines.Add(Socket.ReceiveText);
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?

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.

0

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

0

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

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.

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.

0

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

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?

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 ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1