TTcpServer i przerywanie nawiazanego polaczenia

0

Witam
Używam Turbo Delphi Explorer. W zakładce INTERNET dostępny jest min.
komponent: TTcpServer. Próbuję zbudować na nim mini serwer nasłuchujący na
porcie. Połączenia nawiązuje na razie albo przez TTcpClient albo sesja
telnetu.
Wszystko działa ale tylko jeden raz, tzn odczytuję tylko jedna linię
informacji (readln) w procedure TForm1.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
i połaczenie zostaje zerwane - muszę je nawiązywać ponownie. Sporo googlałem
na ten temat ale poza krytykowaniem tych komponentów i namawianiem mnie do
przejścia na full wersje INDY lub ICS nie znalazłem odpowiedzi na moje
pytanie.

Na jakimś niemieckim forum znalazłem czlowieka z tym samym problemem ale
rozwiazania niestety nikt nie podal. Może ktos z Was naprowadzi mnie na
rozwiązanie?
Acha, komponent TTcsServer dziala w trybie bmThreadBlocking bo tylko w tym
trybie komponent notyfikuje jakiekolwiek eventy.
Dzieki z gory

Moj kod:

procedure TForm1.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
var
X : string;
begin
X := ClientSocket.Receiveln();
Memo1.Lines.Append( X );
ClientSocket.Sendln( X );
end;

P.S. - to ClientSocket.Sendln( X ); ma robi echo odebranej linii, po wyslaniu
echa polaczenie zostaje zerwane i musze je ponwnie nawiazywac, a ja chcialbym
aby ciagle trwalo.

0

Mam podobny problem tylko że za w TCPServerAccept mam

ListBox.Items.Add(ClientSocket.LocalHostName+'('+ClientSocket.LocalHostAddr+')');

A w timerze co 1 ms mam

if staredane <> TcpServer1.Receiveln() then
begin
staredane := TcpServer1.Receiveln();
  Showmessage(TcpServer1.Receiveln());

Do połączenia używam kodu:

TCPClient1.Active := True;
if TCPCLient1.Connect then
begin
{nic :PP}
end
else
begin
Showmessage('Buu!');
TCPClient1.Active := False;
end;

a do wysyłania:

TCPClient1.Sendln(memo1.text);

i nic mi niedziala

0

Już zrobilem zainstalowalem sobie sockety.

0

serverem odbiera sie tak:

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
 str:string;
begin
 str:=Socket.ReceiveText;
 Memo1.Lines.Add(str);
end;

identycznie w kliencie:

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
 str:string;
begin
 str:=Socket.ReceiveText;
 Memo1.Lines.Add(str);
end;
0

A z kąd wziąłeś te sockety??

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