Entwickler-Ecke
Internet / Netzwerk - Eigener Proxy - Anfänger
Tobi482 - Fr 24.11.06 21:01
Titel: Eigener Proxy - Anfänger
Hi Leute,
mit Delphi bin ich eigentich sehr bewandert, nur mit den TCP/IP Objekten bin ich blutiger Anfänger.
Ich wollte gerne einen Proxy-Server bauen der Pakete stumpf an eine beliebige IP umleitet. Leider taucht ein Fehler auf den ich mir nicht erklären kann.
Bitte schaut euch meinen Code an. Es ist sicherlich ein Verständnisproblem in der Funktionsweise der Sockets.
PS: mit den Winsocks (VB6) hatte ich nie Probleme. Ich denke mein Fehler ist das ich die Sockets in Delphi wie einen Winsock benutzte^^.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| procedure Tmain.FormCreate(Sender: TObject); begin server.Port := 1000; server.Open; Addlog('Proxy listen'); end;
procedure Tmain.serverClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin Addlog('Client hat sich verbunden');
client.Address := 'xxx.xxx.xxx.xxx'; client.Port := 1000; client.Open; end;
procedure Tmain.serverClientRead(Sender: TObject; Socket: TCustomWinSocket); var msg : string; begin msg := Socket.ReceiveText;
while server.Active = false do begin sleep(100); Application.ProcessMessages; end;
addlog('proxy->server'); client.Socket.SendText(msg); end;
procedure Tmain.clientRead(Sender: TObject; Socket: TCustomWinSocket); var msg : string; begin msg := Socket.ReceiveText;
while client.Active = false do begin sleep(100); Application.ProcessMessages; end;
addlog('proxy->client'); Server.Socket.SendText(msg); end; |
Die Fehler tauchen gleich beim ersten oder zweiten ClientRead oder ServerClientRead auf und immer in der letzten Zeile, also beim senden an die Partnerverbindung.
schon einmal herlzichen Dank im Voraus
Mit freundlichewn Grüßen
Tobi
GTA-Place - Fr 24.11.06 23:01
Wie lautet denn die Fehlermeldung ;-)?
Tobi482 - Sa 25.11.06 20:27
Fehler:
weiß gerade nicht den genauen wortlaut, ist aber so ähnlich wie
API Fehler: "send" bzw "recv" wurde ausgeführt (ws2_32.dll) mit leerem Host Paramter
Gruß Tobi
GTA-Place - Sa 25.11.06 20:53
Hast du auch en Host angegeben?
Narses - Sa 25.11.06 21:41
Moin!
Da deine Problembeschreibung recht "dürftig" ist, nur etwas zum grundsätzlichen Konzept:
Du verwendest die Socket-Komponenten wie Blocking-Sockets, aber arbeitest mit Ereignissen. :? Das ist nicht so gut geplant. Entweder zu schaltest die Sockets in den Blocking-Mode und arbeitest mit Threads, oder du verwendest die Ereignisse und reagierst entsprechend darauf. Konkret meine ich die Warteschleifen mit dem Sleep und dem ProcessMessages, das ist sehr unsauber. ;)
cu
Narses
Tobi482 - So 26.11.06 10:08
Ok hier nochmla der genau Fehler
Fehler:
"Windows-Socket-Fehler: Eine Anfprderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und (beim Senden über einen Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde (10057), auf API 'send'"
wenn ich mich nicht irre ist das doch ein Fehler der von den Basisbefehle kommt die die Socket Komponente verwaltet.
@Narses die schleifen sind nur aus einem grund da. Wenn die zu rootende Anwendung sich auf den Proxy connected, denkt diese, dass sie schon mit dem original server verbunden sei und fängt an munter Daten zu senden. Der proxy baut die verbindung zum original server erst dann auf, wenn sich jemand auf ihn conncted. Dabei macht eine Firewall immer die meldung "wollen sie xyz wirklich durchlassen?". Ich denke, dass wenn jetzt schon versurch werden würde daten zu senden, diese Pakete verloren gehen. Würde ich den Proxy früher verbinden trennt der originla Server die verbindung, wenn nicht nach kurzer (sehr kurzer) Zeit Daten kommen.
Wenn du eine andere möglichkeit kennst, ich bin für jede Hilfe offen^^
Gruß Tobi
Tobi482 - Di 29.01.08 15:14
Hab ganz vergessen diesen Thread zu beenden
Danke nocheinmal für eure Hilfe
Mit freundlichen Grüßen
Tobi
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!