AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi problem mit VCL port -> nonVCL (tcp)
Thema durchsuchen
Ansicht
Themen-Optionen

problem mit VCL port -> nonVCL (tcp)

Ein Thema von Beckman · begonnen am 21. Feb 2005 · letzter Beitrag vom 22. Feb 2005
Antwort Antwort
Beckman

Registriert seit: 12. Jul 2004
205 Beiträge
 
#1

problem mit VCL port -> nonVCL (tcp)

  Alt 21. Feb 2005, 21:15
//communikation mit GUI/client funkt, mit cmdline/client net.

also geschickt werden die texte, aber empfangen wird einfach nix.
server ist allerdings in ordnung, weil beim gui/clienten funkt es ja...

die loesung hab ich irgendwo im net gefunden fuer den indy tcpclienten, nur porten tuts net so richtig :/

jo, ich brauchs cmdline.


waer dankbar fuer hilfe.....



GUI/client:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ScktComp, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Memo1: TMemo;
    Edit3: TEdit;
    TCP: TIdTCPClient;
    procedure Edit3KeyPress(Sender: TObject; var Key: Char);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure SendLine(Src: String);
  end;

  TClientHandleThread = class(TThread)
  private
    Message: String;
    procedure HandleInput;
  protected
    procedure Execute; override;
  end;

var
  Form1: TForm1;
  ClientHandleThread: TClientHandleThread;

implementation

{$R *.dfm}

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if (key = #13) then begin
  memo1.lines.add('OUT: ' + edit3.Text);
  SendLine(edit3.text);
  edit3.clear;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
tcp.Disconnect;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if tcp.Connected then begin
  memo1.lines.add('already connected');
  exit;
  end;
TCP.Host := edit1.Text;
TCP.Port := strtoint(edit2.Text);
try
  TCP.Connect(3000);
  ClientHandleThread := TClientHandleThread.Create(True);
  ClientHandleThread.FreeOnTerminate:=True;
  ClientHandleThread.Resume;
except
  showmessage('error!');
  end;
end;

procedure TForm1.SendLine(Src: String);
begin
tcp.WriteInteger(length(Src));
tcp.Write(src);
end;

procedure TClientHandleThread.HandleInput;
begin
form1.memo1.lines.add('IN: ' + Message);
end;

procedure TClientHandleThread.Execute;
begin
  while not Terminated do
  begin
    if not Form1.TCP.Connected then
      Terminate
    else
    try
      Message := Form1.TCP.ReadString(Form1.TCP.ReadInteger);
      Synchronize(HandleInput);
    except
    end;
  end;
end;

end.






CMDLINE/client:


Delphi-Quellcode:
program becmac;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows, IdTCPClient, Classes;

type
  TClientHandleThread = class(TThread)
  private
    Message: String;
    procedure HandleInput;
  protected
    procedure Execute; override;
  end;

var
  TCP: TIdTCPClient;
  ClientHandleThread: TClientHandleThread;

procedure SendLine(Src: String);
begin
tcp.WriteInteger(length(Src));
tcp.Write(src);
end;

procedure TClientHandleThread.HandleInput;
begin

writeln('IN: ' + Message);

end;

procedure TClientHandleThread.Execute;
begin
  while not Terminated do
  begin
    if not TCP.Connected then
      Terminate
    else
    try
      Message := TCP.ReadString(TCP.ReadInteger);
      Synchronize(HandleInput);
    except
    end;
  end;
end;

begin

TCP := TIdTCPClient.Create(nil);
ClientHandleThread := nil;
TCP.Host := <HOST>;
TCP.Port := <PORT>;
try
  TCP.Connect(5000);
  ClientHandleThread := TClientHandleThread.Create(True);
  ClientHandleThread.FreeOnTerminate := True;
  ClientHandleThread.Resume;
except
  ClientHandleThread.Free;
  TCP.Free;
  writeln('Connection failed...');
  Exit;
  end;

-----------------------------------



//da hat er halt schleifen wo er wartet, bis gewisse strings gekommen sind
//mit sleep(1)




-----------------------------------




//exit
Sendline('BYE');
ClientHandleThread.Free;
TCP.Free;

end.
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: problem mit VCL port -> nonVCL (tcp)

  Alt 21. Feb 2005, 21:43
füge nach...
ClientHandleThread.Resume;

noch
ClientHandleThread.WaitFor;

ein, dann hast bessere Chancen dass es funktioniert.


das ClientHandleThread.Free würd ich wegmachen, da Du FreeOnTerminate auf true setzt ... entweder das eine oder das andere.

[Nachtrag]
-----------------------------------



//da hat er halt schleifen wo er wartet, bis gewisse strings gekommen sind
//mit sleep(1)




-----------------------------------


das habe ich in Deinem Quellcode übersehen...
[/Nachtrag]
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Beckman

Registriert seit: 12. Jul 2004
205 Beiträge
 
#3

Re: problem mit VCL port -> nonVCL (tcp)

  Alt 21. Feb 2005, 22:05
k, das free hab ich weg getan.

dann war endlich das := nil; als initialization nicht mehr notwendig


aber das waitfor tuts nich wirklich, so tut er ja dann nich weiter...

der code funkt ja, wie er ist..


es muss irgendwo im aufbau bezueglich des nonVCL codens liegen.........

ich werd mal temporaer das GUI app veweneden, damit ich halt wenigstens die funktionen des servers fertig machen kann, bzw noch das protocol erweitern.....

argh, solche sahcen dann bringen den ganzen zeitplan durcheinander....
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#4

Re: problem mit VCL port -> nonVCL (tcp)

  Alt 21. Feb 2005, 23:40
Sleep() friert dein Programm soweit ich mich erinnere eine, also kommte es zu keinem writeln usw., eine Art Delay-Funktion wäre evtl. sinnvoller:

Delphi-Quellcode:
procedure Delay(ms : Cardinal);
Var
  TickCount : dword;
  M : TMsg;
Begin
  TickCount := GetTickCount;
  repeat
    If PeekMessage(M, 0, 0, 0, pm_Remove) then
      Begin
        TranslateMessage(M); DispatchMessage(M);
      End;
  until not ((GetTickCount - TickCount) < ms);
End;
  Mit Zitat antworten Zitat
Beckman

Registriert seit: 12. Jul 2004
205 Beiträge
 
#5

Re: problem mit VCL port -> nonVCL (tcp)

  Alt 21. Feb 2005, 23:44
ja, danke...
aber repeat sleep(1) kanns net freezen, zumindest ist 1000 mal in sek schnell genug

egal.. folgendes:

hab jetzt ne coole VCL oberflaeche.
vil ist der auftraggeber damit einverstanden.

ich meld mich wieder, wenn net. bis dahin braucht keiner zeit verlieren mit dem code...
und danke an alle, die es haetten


lg, beck.
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#6

Re: problem mit VCL port -> nonVCL (tcp)

  Alt 21. Feb 2005, 23:57
Ich meinte damit nicht, das dein Programm abstürzt oder so, nur das es keine Nachrichten entgegennimmt, solange es sich in der reapeat-Schleife befindet, es regagiert nicht, "schläft" eben.
  Mit Zitat antworten Zitat
Beckman

Registriert seit: 12. Jul 2004
205 Beiträge
 
#7

Re: problem mit VCL port -> nonVCL (tcp)

  Alt 22. Feb 2005, 00:04
jo, schon klar

aber trotzdem:

sleep(10000) wuerde erreichen, dass das prog 10sec schlaeft.

repeat
sleep(1);
until irgendwas;

allerdings behaelt es flexibel



naja egal. deine loesung ist trotzdem cooler/besser/schoener, drum will ich net meine verteidigen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz