Autor Beitrag
Seraph
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 163

Windows.:siXPack:.
Delphi7 Professional
BeitragVerfasst: Mo 07.11.05 09:40 
Hallo Leute!

Ich progge gerade eine TCPComunication zwischen zwei Programmen!

Geschichte:
Ich habe in C++ ein Programm geschrieben, wo TCPClient und TCPServer gegenseitig Strings übermitteln!
Jetzt ist es für mich günstiger, diese Methode in ein bestehendes DelphiProjekt einzubinden!

Ich habe jetzt schonmal einen stinknormalen IdTCPServer gebaut:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
  Memo1.Lines.Text := Memo1.Lines.Text + AThread.Connection.ReadString(255);
end;


Hierbei sende ich mit einem Client über den selben Port und selbstverständlich die richtige IP einen String an den Server, welcher diesen String in ein Memo übernehmen soll!

Jetzt das Problem:
Ich sende von einem anderen Computer aus den String ab.
Der String wird aber erst in der MemoBox ausgegeben, wenn ich den String 3x abgesendet habe!
Der Server schreibt ihn aber dann nicht nur einmal, sondern auch wieder dreimal in das Memo.

Frage:
Kann es etwas mit der ConstByte angabe zutun haben, die bei der ReadString-Funktion verlangt wird! Wenn ja, wie bekomme ich die Länge des ankommenden Strings heraus? :gruebel:

Danke im Voraus und Grüße
Seraph
Seraph Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 163

Windows.:siXPack:.
Delphi7 Professional
BeitragVerfasst: Mo 07.11.05 11:49 
Vergesst das Oben!
Das hat mir eh keinen Wert mehr!

Neues Problem:
Ich suche schon das ganze Internet nach einer ClientRead Methode ab!
Da kommen dann immer diese Chat-Beispiele und so.
Damit der Client etwas empfängt wenden alle die Methode "idTCPClient.ReadLn;" an.
Wenn ich das mache, hängt sich der Client auf. Aber schon Vollgas!

Meine Frage ist nun:
Kann ich herausfinden (wirklich nur prüfen), ob der Client überhaupt etwas empfängt?

Danke euch im Voraus
Seraph
BattleFrog
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 53

WIN 2000
Delphi 7 Ent.
BeitragVerfasst: Di 08.11.05 16:07 
Der Client empfängt nix ohne das eine Read Funktion aufgerufen wurde.
Erst dann schickt der Server etwas los.

Daher kann man nicht wissen ob da Daten sind, bevor man die Daten gelesen hat.
Seraph Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 163

Windows.:siXPack:.
Delphi7 Professional
BeitragVerfasst: Di 08.11.05 16:17 
user profile iconBattleFrog hat folgendes geschrieben:
Der Client empfängt nix ohne das eine Read Funktion


Wenn ich eine onRead Funktion mache, hängt sich der client voll auf!
Der Client komuniziert nämlich mit einem Server, der in C++ programmiert wurde!
Und der handelt anders! Jetzt hab ich wohl das Problem, dass der Server sich nix abverlangen lässt! Der schickt nämlich nix, wenn jemand was anfordert!

Ich hab sogar schon Examples connecten lassen! Vergeblich. Hängen sich alle auf!

Grüße
Seraph
BattleFrog
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 53

WIN 2000
Delphi 7 Ent.
BeitragVerfasst: Di 08.11.05 16:33 
Kommt denn eine Fehlermeldung oder reagieren die Clients garnicht mehr?

Zeig doch mal bitte den C++ Teil der den String zum Client raushaut.
Seraph Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 163

Windows.:siXPack:.
Delphi7 Professional
BeitragVerfasst: Fr 11.11.05 16:24 
Titel: Hier der Quellcode des Servers:
user profile iconBattleFrog hat folgendes geschrieben:
Zeig doch mal bitte den C++ Teil der den String zum Client raushaut.

ausblenden C#-Quelltext
1:
2:
Server->Socket->Connections[0]->SendText("Keystring");
                              //0, da nur ein Client vorhanden sein kann ist
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Fr 11.11.05 16:31 
Mach das ReadLn in einem Timer.OnTimer, mit dem Parameter 5, denn so wartet der Client maximal 5ms auf eine Antowert. Dann prüf erst, ob im String was drinsteht.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Seraph Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 163

Windows.:siXPack:.
Delphi7 Professional
BeitragVerfasst: Fr 11.11.05 17:05 
user profile iconjakobwenzel hat folgendes geschrieben:
Mach das ReadLn in einem Timer.


Selbst wenn ich beim OnFormCreate sage, dass er Readen soll, hängt er sich auf! Da wäre ein Timer ja der Vollabschuss!

Sorry, aber ich glaube, dass C++-Indy's nicht mit Delphi-Indy's kommunizieren können. Ich hab schonmal einen in Delphi programmierten Beispielchat ausprobiert! Hab client gemacht! IP und Port alles korrekt eingestell.
Da nahm sich der Rechner nen Strick...den Rest kann man sich denken! :?
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Fr 11.11.05 20:01 
user profile iconjakobwenzel hat folgendes geschrieben:
[...] mit dem Parameter 5, denn so wartet der Client maximal 5ms auf eine Antowert. Dann prüf erst, ob im String was drinsteht.

Wie ich schon schrieb: Du machst es mit dem Parameter 5 (also xy.ReadLn(5);), sodass der Client maximal 5ms wartet, bis etwas gesendet wurde. Danach musst du halt prüfen, ob in dem String was drinsteht.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
crt
Hält's aus hier
Beiträge: 6

Gentoo, Win XP Prof
D7 Prof
BeitragVerfasst: Fr 11.11.05 23:16 
Bedeutet ReadLn nicht, dass der alles bis zum nächsten Zeilenumbruch empfängt?
Einen Zeilenumbruch sendest du nämlich gar nicht...
Das würde auch das Aufhängen erklären - der wartet vergeblich auf sein #10#13...
BattleFrog
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 53

WIN 2000
Delphi 7 Ent.
BeitragVerfasst: Mo 14.11.05 11:25 
Ja da fehlt einfach ein Timeout im CLient, oder ein Zeilenumbruch vom Server.
Seraph Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 163

Windows.:siXPack:.
Delphi7 Professional
BeitragVerfasst: Mi 16.11.05 13:32 
Ja, es lag an dem Zeilenumbruch!
Danke Leute!

Grüße
Seraph

_________________
Wer früher stirbt ist länger tot!