Entwickler-Ecke
Internet / Netzwerk - Serverantwort zurück zum client
tmkb - Mo 06.01.03 03:31
Titel: Serverantwort zurück zum client
Hallo,
Ich habe ein Tool mit der Server kompo von Delphi welches nen bestimmten Port überwacht und auf befehle wartet. Kommt von einem beliebigen PC aus dem Internet ein bestimmter Befehl über diesen Port, kommt das beim server über SocketRead an und wird verarbeitet. jetzt habe ich das Problem dass ich nicht weiß wie ich wieder was zurückschicke? wenn ich den befehl nehme:
Serversocket1.socket.sendtext('bla');
dann kommt die fehlermeldung er wäre mit keinem clienten verbunden bzw hätte nicht die IP an wen das gehen soll (was auch relativ logisch ist). Wie mache ich das, das er in dem Fall das Wort "bla" dorthin zurückschickt, von dem er die soeben bekommene anfrage bekommen hat?
naja, ist jetzt bißchen komliziert ausgedrückt, aber eigentlich ne ganz simple Frage, bedanke mich im vorraus, cu! tmkb
BungeeBug - Mo 06.01.03 07:49
Hi
ich habs grad mal ausprobiert und bin dann doch recht schnell zu dem entschluss gekommen das das nur geht wenn du bei Begin der Verbindung deine IP Adresse und den Port übertragen musst (Per Eingabeformular, da mir keine sichere Methode einfällt wie man die Daten irgendwo auslesen kann ... ).
MfG BungeeBug
thebe - Mo 06.01.03 09:46
Moin
im OnRead Event wird nen Socket übergeben.
Das is der Socket auf dem gelesen wurde und an dem der Client dran hängt. Du kannst also im OnRead Event einfacher per
Socket.SendText('Bla!');
etwas zurückschicken.
tmkb - Mo 06.01.03 14:26
Die Antwort steht auch im onread ereignis, aber es kommt trotzdem der fehler:
Quelltext
1:
| Windows socket error: Eine Anforderung zum senden und empfangen von Daten wurde verhindert, da der socket nicht verbunden ist und (beim senden über einen Datagrammsocket mit einem sendto aufruf) keine Adresse eingegeben wurde (10057), on Api 'send' |
Das ist mein problem, kann da jemand was mit anfangen?
thx, tmkb
Ps. Ich kann den, der die Anfrage an den Server schickt nicht seine IP eingeben lassen, da er nicht ein von mir programmiertes programm nuzt (zB Telnet, Internet explorer).
Udontknow - Mo 06.01.03 14:35
Hi!
Bist du dir ganz sicher, daß du nicht irgendwie
Quelltext
1:
| Serversocket1.socket.sendtext('bla'); |
oder
Quelltext
1: 2: 3: 4: 5:
| with Serversocket1 do begin ... Socket.sendtext('bla'); ... end; |
schreibst ,sondern wirklich den
vom Ereignis gelieferten Socket ansprichst??? Poste mal deine Ereignisbehandlung.
Cu,
Udontknow
tmkb - Mo 06.01.03 14:57
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var Strings: TStringList;i: Integer; TempStr: String; begin
memo1.Lines.Clear; Strings := TStringList.Create; strings.Text := socket.ReceiveText; for i := 0 to Strings.Count - 1 do Memo1.lines.add(Strings[i]); Strings.Free;
Serversocket1.socket.sendtext(memo2.text);
end; |
Liegt das vielleicht daran dass der CLient in dem fall der Internet explorer ist? ich will nämlich nen kleinen proxy coden, also wenn die anfrage per onread reinkommt holt er sich die seite und lädt den quelltext auf memo2.text und schickt den zurück an den Internet explorer, das geht aber nicht, obwohl der noch lädt, also eigentlich im "Auf die page warte modus" sein müsste.
Udontknow - Mo 06.01.03 15:04
Wie Thebe bereits andeutete, benutzt du eben
nicht den Socket, den dir das Ereignis liefert.
Hier der korrekte Code:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket:TCustomWinSocket); //Diesen Socket benutzen!!!! var Strings: TStringList;i: Integer; TempStr: String; begin memo1.Lines.Clear; Strings := TStringList.Create; strings.Text := socket.ReceiveText; for i := 0 to Strings.Count - 1 do Memo1.lines.add(Strings[i]); Strings.Free; Socket.sendtext(memo2.text); //vom Ereignis übergebener Socket!
end; |
Cu, :)
Udontknow
tmkb - Mo 06.01.03 16:14
danke, jezz klappts!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!