Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Problem mit Tcp/Ip Verbindung zwischen Delphi und Blitz3D (https://www.delphipraxis.net/109279-problem-mit-tcp-ip-verbindung-zwischen-delphi-und-blitz3d.html)

spiderb 27. Feb 2008 14:01


Problem mit Tcp/Ip Verbindung zwischen Delphi und Blitz3D
 
Ich möchte mit Hilfe von Indy10 für Delphi Nachrichten von einem mit Blitz 3D geschriebenen Server empfangen.
Mein Server merkt zwar, wenn sich der Client verbindet und disconnected, erhält aber nicht die Nachrichten.
Mein Serer ist nach diesem Tutorial geschrieben.
Nun sieht der blitz3D quelltext so aus:
Code:
Global strmGame=OpenTCPStream("127.0.0.1",8080)
[...]
WriteString strmGame,"nachricht"
Jetzt weiß ich halt nicht, wieso ich diese Nachricht nicht empfange.
Vielleicht etwas mit IOHandler?
Kann mir jemand helfen?
mfg

DataCool 27. Feb 2008 22:24

Re: Problem mit Tcp/Ip Verbindung zwischen Delphi und Blitz3
 
Hi,

ich kann Dir gerade nicht ganz folgen.
Was ist Dein Client und was Dein Server ?
Wie fliessen die Daten ?

Im TIdTcpClient kann Du Lesen und schreiben mit :
Delphi-Quellcode:
  myClient.IOHandler.WriteLn('');
  myClient.IOHandler.ReadLn();
Im TIdTcpServer kannst Du Lesen und Schreiben mit:
Delphi-Quellcode:
  AContext.Connection.IOHandler.ReadLn;
  AContext.Connection.IOHandler.WriteLn('');
Greetz DataCool

spiderb 28. Feb 2008 13:52

Re: Problem mit Tcp/Ip Verbindung zwischen Delphi und Blitz3
 
Mhh ok tut mir leid, wenn ich mich etwas wirr ausgedrückt habe
also ich will den server schreiben und der Client ist mit blitz3d geschriebn
ich habe jetzt :

Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
begin
memo1.Lines.add(AContext.Connection.IOHandler.ReadLn);
end;
aber das memo feld bleibt leer =(
wobei aber
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Connect(AContext: TIdContext);
begin
memo1.lines.Add('connected') ;
end;
funktioniert...
Hat jmd eine idee?

DataCool 28. Feb 2008 14:03

Re: Problem mit Tcp/Ip Verbindung zwischen Delphi und Blitz3
 
Hi,

für mich sieht es so aus,
als ob sich DEin Blitz Client verbindet
und dann aber nichts sendet.

Was aber auch sein kann, da der Server ja multi-Threaded
läuft und im OnExecute ja innerhalb eines Threads ausgeführt
wird, das ganze bei Zugriff auf die Vcl(Label, Memo, etc)
syncronisiert aufgerufen werden muss.

Mach doch bitte zum Test im OnExecute :

Delphi-Quellcode:
var sData : String;
begin
  sData := AContext.Connection.IOHandler.ReadLn;

  // Breakpoint bei memo1.lines.add setzen
  // und prüfen ob in sData was enthalten ist
  memo1.Lines.add(sData);
end;
Greetz Data

spiderb 28. Feb 2008 16:18

Re: Problem mit Tcp/Ip Verbindung zwischen Delphi und Blitz3
 
also ich bin mir recht sicher, dass der client was schickt, da ich es mit einem blitz3d server empfangen kann.
beim Breakpoint setzten hatte ich jetzt das Problem, dass Delphi bei einem Breakpoint bei
Delphi-Quellcode:
memo1.Lines.add(sData);
nicht reagiert hat :gruebel: :gruebel:
aber bei
Delphi-Quellcode:
sData := AContext.Connection.IOHandler.ReadLn;
funktioniert es und da ist sDatet leer!
Ich habe auch das Gefühl, dass er garnicht weiter als ReadLn kommt, da auch bei allen möglichen anderen braekpoints danach nichts passiert!

Dani 28. Feb 2008 18:17

Re: Problem mit Tcp/Ip Verbindung zwischen Delphi und Blitz3
 
Zitat:

Nun sieht der blitz3D quelltext so aus:
Code: markieren
Global strmGame=OpenTCPStream("127.0.0.1",8080)
[...]
WriteString strmGame,"nachricht"
Was genau steht in "[...]"?
Ansonsten lese halt erstmal einzelne Bytes vom Socket, du weißt ja eigentlich nicht genau, in welcher Form Blitz3D Strings übermittelt.

spiderb 28. Feb 2008 18:44

Re: Problem mit Tcp/Ip Verbindung zwischen Delphi und Blitz3
 
Code:
Global strmGame=OpenTCPStream("127.0.0.1",8080)
Global x = 0
Global b = 42

Global spielen = True

If strmGame<>0 Then
Print "Client Connected successfully."
Else
Print "Server failed to connect."
WaitKey
End
End If


Repeat


send()

Until KeyHit(1)




Function send()
If spielen = True
For i = 1 To b
WriteString strmGame,"hallo"
 

x = x + 1


If x > 42
b = -1 
End If




Print "Message" + x
Delay 1500
Next
End If

If b < 0
WriteString strmGame,"Restzüge : " + (42 - x)
WriteString strmGame,"---"
WriteString strmGame,"-Ende-"
CloseTCPStream strStream
Print "Disconnection successfully."
Delay 60000
End If

End Function
so in etwa sieht das bei blitz aus
wie kann ich denn die denn einzelnd auslesen? ich hab leider kaum Ahnung in dem bereich :roll:

Muss ich eigentlich noch irgendwie einen IOHandler erstellen?

mfg

DataCool 28. Feb 2008 19:34

Re: Problem mit Tcp/Ip Verbindung zwischen Delphi und Blitz3
 
Hi,

poste mal bitte Deinen kompletten Code des Servers;
Irgentwo ist bei Dir was im Argen,
denn der Server muss via Breakpoint auch bei dem Memo1.lines.add anhalten!

Und wenn Du beim ReadLn den BreakPoint setzt und dann mit F8 weiter stepst,
bei welcher Zeile landet Delphi dann ?


Greetz Data

spiderb 28. Feb 2008 19:48

Re: Problem mit Tcp/Ip Verbindung zwischen Delphi und Blitz3
 
kann es iwi sein, dass da dann garnix passiert:P
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdCustomTCPServer,
  IdTCPServer, idContext;

type
  TForm1 = class(TForm)
    TCPServer: TIdTCPServer;
    Memo1: TMemo;
    procedure TCPServerExecute(AContext: TIdContext);
    procedure TCPServerConnect(AContext: TIdContext);
    procedure TCPServerDisconnect(AContext: TIdContext);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.TCPServerConnect(AContext: TIdContext);
begin
  Memo1.Lines.Add('Verbindung: ' + AContext.Binding.PeerIP);
end;

procedure TForm1.TCPServerDisconnect(AContext: TIdContext);
begin
  Memo1.Lines.Add('Verbindungsabbruch: ' + AContext.Binding.PeerIP);
end;

procedure TForm1.TCPServerExecute(AContext: TIdContext);
var str : string;
begin
  str := AContext.Connection.IOHandler.ReadLn;
  Memo1.Lines.Add('Nachricht: ' + str);
end;

end.
und im objektispektor hab ich nur active= true und den defaultport eingegeben.

DataCool 28. Feb 2008 20:02

Re: Problem mit Tcp/Ip Verbindung zwischen Delphi und Blitz3
 
Hi,

ich glaube ich weiß was das Problem ist.
Der Blitz Client schreibt nur mit Write in die Connection,
beim Indy Server benutzt Du im Moment ReadLn,
d.h. der Client muss nach seinem "String" auch ein CrLF schicken.
Solange kein CrLF im Buffer ist wird auch nicht das Ende von ReadLn
ausgelöst.

Greetz Data


P.S.: Ob Dein jetziger Server einwandfrei funktioniert kannSt Du testen, indem Du :
- Die Console startet (Start/Ausführen/cmd.exe)
- telnet 127.0.0.1 8080
- Test1 Enter

Dann sollte Test1 in Deinem Memo stehen


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr.
Seite 1 von 2  1 2      

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