Hallo,
Hilfe, Ich bin am verzweifeln :
Ich mochte daten an Server sender und der gibt gleich resultat zurück.
Einfaches beispiel : Clinet sendet ein Zahl zu, Server setzt wert um eins hoch und sendet zurück.
Server :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| TForm1 = class(TForm) IdTCPServer1: TIdTCPServer; Button1: TButton; procedure Button1Click(Sender: TObject); procedure IdTCPServer1Disconnect(AContext: TIdContext); procedure IdTCPServer1Connect(AContext: TIdContext); procedure IdTCPServer1Execute(AContext: TIdContext); private C : TIdContext; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext); Var I : Integer; begin if not AContext.Connection.IOHandler.Readable Then Exit; I := AContext.Connection.IOHandler.ReadInteger; AContext.Connection.IOHandler.Write (Integer (I + 1)); end; |
Client :
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72:
| TMyTCPClient = Class (TIdTCPClient) Private FTimer : TTimer; FOnExecute : TNotifyEvent; Procedure DoExecute (Sender : TObject); Public Constructor Create (AOwner : TComponent); reintroduce; Property OnExecute : TNotifyEvent Read FOnExecute Write FOnExecute; End;
TForm1 = class(TForm) IdTCPClient1: TIdTCPClient; Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private f : TMyTCPClient; Procedure OnExecute (Sender : TObject); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end;
var Form1: TForm1;
implementation
{$R *.dfm}
Constructor TMyTCPClient.Create (AOwner : TComponent); Begin Inherited Create (AOwner); FTimer := TTimer.Create (Self); FTimer.Enabled := True; FTimer.Interval := 25; FTimer.OnTimer := DoExecute; End;
Procedure TMyTCPClient.DoExecute (Sender : TObject); Begin If Not Connected Then Exit; If Not IoHandler.Readable (0) Then Exit; If Assigned (OnExecute) Then OnExecute (Self); End;
constructor TForm1.Create(AOwner: TComponent); begin Inherited; f := TMyTCPClient.Create(self); f.Host := 'localhost'; f.Port := 8000; f.OnExecute := OnExecute; f.Connect; end;
Procedure TForm1.OnExecute (Sender : TObject); Var I : Integer; Begin I := f.IOHandler.ReadInteger; memo1.Lines.Add(IntToStr (I)); End;
procedure TForm1.Button1Click(Sender: TObject); Var I : Integer; begin f.IOHandler.Write(Integer (100)); End; |
An den Server kommen daten immer, zu Client nie !!
Warum?
In der Procedure DoExecute
Delphi-Quelltext
1: 2:
| If Not IoHandler.Readable (0) Then Exit; If not self.Socket.Readable(0) then exit; |
IoHandler.Readable (0) und Socket.Readable(0) geben immer False zurück,
als ob keine daten vom Server gibt's. An ahnliche stelle des Servers läuft das.
Was mache ich falsch oder wie soll ich das anders machen.