Autor Beitrag
tmkb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59



BeitragVerfasst: Mo 06.01.03 03:31 
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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 901



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128

WinXP Home
D6 Enterprise
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59



BeitragVerfasst: Mo 06.01.03 14:26 
Die Antwort steht auch im onread ereignis, aber es kommt trotzdem der fehler:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 06.01.03 14:35 
Hi!

Bist du dir ganz sicher, daß du nicht irgendwie

ausblenden Quelltext
1:
Serversocket1.socket.sendtext('bla');					


oder

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59



BeitragVerfasst: Mo 06.01.03 14:57 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59



BeitragVerfasst: Mo 06.01.03 16:14 
danke, jezz klappts!