Autor Beitrag
markusagb
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Di 28.02.17 23:24 
Hallo zusammen,

vielleicht könnt Ihr mir helfen, ich möchte einen Code von Delphi 7 auf 10 migrieren,
es hapert lediglich an einer Sache, und das geht nicht nur mir so.

Indy.post funktioniert in Delphi 7 wie folgt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Post;
Var
Params : TStringStream;
Url : String;
begin
          Params := TStringStream.create('');
          Params.WriteString('TA=1');
          IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
          Url:='http://127.0.0.1:8181';
          try
             Memo1.Text:=IdHttp1.Post(Url, Params);
          except
          ...
end;

Ich sende von meiner Applikation einen Post mit dem Wert "1" an eine andere App auf dem gleichen PC die auf Port 8181
empfängt, wenn "1" empfangen wird führt die App eine Routine aus. Das Ganze ist natürlich fürs Netzwerk gedacht von PC
1 zu PC2 usw...

In Delphi 10 kriege ich das allerdings nicht zum Laufen, der Post geht einfach nicht raus. Port ist offen, ein anderes Programm
sendet über den Port und es kann auch empfangen werden. Muss ich hier in Delphi 10 am Code etwas ändern?

Danke für Eure Hilfe!!

Markus

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 01.03.17 02:01 
- Nachträglich durch die Entwickler-Ecke gelöscht -
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18732
Erhaltene Danke: 1631

W10 x64 (Chrome, IE11)
Delphi 10.2 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 01.03.17 05:47 
Da TStringStream standardmäßig auch unter Delphi 10 noch AnsiStrings schreibt, kann es kaum ein Unicodeproblem sein. Es sei denn Indy liest den String aus dem Stream und kodiert die Daten um.

Um das zu testen kannst du wie user profile iconFrühlingsrolle schon geschrieben hat eine TStringList benutzen. Die hat nämlich den Vorteil, dass du an Post als dritten Parameter das Encoding mitgeben kannst.

Was passiert denn in deinem except? Zeigst du auftretende Fehler auch an? Und hast du das ganze im Debugger durchlaufen lassen? Kam eine Meldung?
Wenn nicht, was kommt denn im Memo an?
markusagb Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Do 02.03.17 14:25 
Hallo zusammen,

die Fehlermeldung heißt "Socket-Fehler # 10061 Verbindung abgelehnt".

Die Memo (Result) zeigt nichts an, gibt auch keine Fehlermeldung aus.
Die exception fliegt bei "http.post".

Mit TStringList bekomme ich einen "Bad Request error bei http.post(...)

Ich habe mich versucht einzulesen da viele das gleiche Problem haben,
lustiger weise funktioniert es in Delphi 7 wunderbar. Das muss wohl in Delphi 10
anders programmiert werden, leider findet mein Freund google auch nichts ...
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 02.03.17 15:58 
- Nachträglich durch die Entwickler-Ecke gelöscht -
markusagb Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Do 02.03.17 17:32 
Danke für den Tip,
leider genau so ausprobiert und wieder Fehlermeldung, entweder "Verbindung wurde von Peer zurück gesetzt " oder "Die Verbindung wurde erfolgreich geschlossen".

Wenn ich den Code in Delphi 7 öffne funktioniert er.

Ich habe gelesen dass es mit Indy Delphi 10 so schlichtweg nicht geht - ist die Frage wie dann...
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 02.03.17 19:49 
- Nachträglich durch die Entwickler-Ecke gelöscht -
markusagb Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Do 02.03.17 19:53 
Es ist in diesem Fall zum Testen der eigene PC also 127.0.0.1, Port 8181 ist frei und kann auch von einem anderen Programm
benutzt werden. Da ich nun 4 user mit dem gleichen Problem gefunden habe und diese auch kein Ergebnis dazu hatten bis heute denke ich vielleicht doch an ein Komponentenproblem... außer jemand hier im Forum hat mir vielleicht nen anderen Tipp wie ich per Http-Post eine String-Variable (1 oder 0) zu einem Client schicken kann..

Danke Euch!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18732
Erhaltene Danke: 1631

W10 x64 (Chrome, IE11)
Delphi 10.2 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 02.03.17 19:57 
Bei dem Socketfehler "Verbindung abgelehnt" kommt es noch gar nicht zu einem Datenaustausch. Das heißt es kann nicht an irgendwelchen String-Kodierungen liegen.

Führe mal bitte diesen Befehl mit Adminrechten aus kurz nachdem du die Fehlermeldung Verbindung abgelehnt bekommen hast:
ausblenden Quelltext
1:
netstat -abno > c:\NetstatOutput.txt					

Dann suche bitte einmal die Zeile, in der der Port vorkommt und poste diese.

Der andere Fehler "Verbindung wurde von Peer zurück gesetzt" heißt, dass zwar eine Verbindung hergestellt wurde, aber keine Antwort kam. Das kann dann durchaus daran liegen, dass die Daten falsch formatiert waren.

Mit Wireshark könntest du beide Sendungen abfangen und vergleichen wo der Unterschied liegt.

Das andere Programm stammt nicht von dir nehme ich an?
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 02.03.17 20:03 
- Nachträglich durch die Entwickler-Ecke gelöscht -
markusagb Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Do 02.03.17 20:13 
Das war das erste was ich gemacht habe :-(
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 02.03.17 22:10 
- Nachträglich durch die Entwickler-Ecke gelöscht -