Dobry wieczór,
Zacząłem ćwiczyć tcp ip z Synapse. Oczywiście nieporadnie.
Czy możecie poprawić mój - dla Was zapewne najbanalniejszy kod tak aby potrafił przesłać linijkę tekstu pomiędzy serwerem i clientem i odwrotnie? jaki błąd robię? Szukałem synapse w dokumentacji ale kod jest bardzo długi a nie chcę go przeklejać tylko na najprostszym przykładzie zrozumieć. Serwer i klient mają cały czas sprawdzać i nasłuchiwać wartość zmiennej globalne wyślij:string, a odpowiedzi otrzymywać w globalnej zmiennej przyjmij:string. Server i Klient jest u mnie umieszczony w wątkach ma nie blokować kiedyś wątku głównego. Próbowałem zarówno w dwóch programach(serwer i klient osobno) jak i jednym jako jednocześnie działające. Podczas wysyłki klientem program się zamyka/ jakiś wielki błąd się robi. funkcja getip odczytuje IP komputera aktualny. Może macie link do najprostszych przykładów użycia synapse w tcp ip bez na razie zaawansowanego programowania.
procedure tclient.execute; // wątek klienta
label 1;
begin
c := TTCPBlockSocket.Create;
c.Connect (ip, port);
1:
if wyslij<>'' then begin
c.SendString (wyslij);
przyjmij := c.RecvString(timeout);
wyslij:=''; //po wysłaniu ma się skasować aby nie wysyłało co 100ms
end;
sleep(100);
goto 1;
end;
procedure tserver.execute; //wątek serwera
label 1;
var
reciv:string;
begin
s := TTCPBlockSocket.Create;
s.Bind (ip, port);
1:
s.Listen;
if s.canread (timeout) then
begin
przyjmij:=s.RecvString(timeout);
s.SendString(wyslij); // wyslij np = 'ok! odebrano';
end;
sleep(100);
goto 1;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
ser:tserver;
cli:tclient;
begin
port:='8008';
timeout:=1000;
ip:=getip;
cli:=tclient.Create(false); // mają działac cały czas słuchając i być gotowe do zmian zmiennych globalnych
ser:=tserver.Create(false);
end;