Autor Beitrag
Die Brotmafia
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110

Win XP Suse Linux 9.3
Delphi 7 Enterprise, Delphi 2005
BeitragVerfasst: Mo 21.11.05 19:02 
Hmpf, da bin ich mal wieder denn ich habe ein Problem.

Ich hab mir da ne kleine Anwendung gecodet, die funktioniert so:

Es giebt nen Server und nen Client.
Der Server hat die Internet Client Socket Componente, und der Client die Internet Server Socket Componente.
Der Server connected sich, nachdem er gestartet worden ist, zu meiner Ip. (Da er ja die Client Componente hat)
Der Client von mir nimmt dann die Connection an.
Nun kann ich dem Server z.B. text strings schicken, z.B. 'open', der Server reagiert dann auf den Befehl sobald er ihn annimmt, indem er z.B. das Cd-Laufwerk öffnet oder einen Text ausgiebt.
Soweit so gut.

Nun kommt das Problem:
Ich hätte gerne dass mir der Server den Computernamen des anderen Computers schickt.
Den Computername bekommt er über eine funktion, die schon vorher gecodet wurde.
So, nun kann ich mit dem Befehl computername; den Computernamen auslesen.
Nun ist die Sache die, ich hätte gerne dass mir der Server den Computernamen an meinen Clienten schickt und der wiederum den Computernamen in ein Memo überträgt.
Mit dem bisherigen Server geht das nicht, da die Internet ClientSocket Komponente ja nur Befehle empfangen, aber nicht versenden kann...

Meine Ansätze bis jetzt:

Der Server hat jetzt eine Internet ServerSocket UND eine Internet ClientSocket Komponente, er bekommt vom Client, der nun auch eine Serversocket und eine Clientensocket Komponente hat, den Befehl computername und daraufhin schickt er mir dann den Computernamen an meinen Clienten, wo ihn dann der Internet Server aufnimmt.
Das funktioniert auch alles schön und gut, aber das Problem dabei ist:
Ich muss mich ja zuerst zum Server connecten, also vorher war das kein Problem, da connectete sich der Server zu mir, aber nun will ich ja dass er mir auch noch was schicken kann, dazu brauch ich natürlich ne Server Komponente und genau da ist das Problem, ich weis ja nicht wie ich zu der Server Komponente connecten kann da ja die Ip des Remote Rechners nicht habe bzw. mir sie auch nicht zuschicken lassen kann ohne Server Komponente.

Ich hoffe ihr habt mich einigermaßen verstanden:
Nochmal in Kurzform:

Vorher konnte mein Server super funktionieren weil er sich super zu mir connected hat, da no-ip und so.
Nun hat der Server die Internet ServerSocket Componente, und nun muss ich mich zu ihm connecten.
Ich hab natürlich seine Ip nicht.
Giebts da irgend ne möglichkeit wie ich das Problem lösen kann?
Ich schick auch gerne Teile des Quellcodes auf Wunsch!

user defined image

Was natürlich die beste Lösung wäre wenn der Server mit der Client Komponente meinem Client mit der Server Komponente was schicken könnte, dann wären gleich alle Probleme gelöst, aber das geht ja glaub ich nicht ??

Noch nen Problem was mich sehr unzufrieden macht ist auch, dass sobald ich im Server die ServerSocket Komponente einsetze, ich immer ein Problem kriege auch wenn ich jetzt bei meinem Chat die Ip vom Server habe, aber wenn der Server Pc dann nen Router hat wars das auch schon wieder, deshalb würd ichs am liebsten so lösen dass mir die ClientSocket Komponente vom Server z.B. nen Text etc schicken kann, das geht aber wie schon gesagt glaube ich nicht??

mfg Die Brotmafia
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 22.11.05 13:23 
Moin!

Ich muss sagen, deine Darstellung ist schon etwas wirr und du hast IMHO noch ein paar IN-Grundlagen aufzuholen, deshalb erscheint dir dein Problem so groß und uns (naja, konkrekt mir) deine Beschreibung etwas unverständlich... :wink:

Da ich nicht so wirklich durchblicke, was du da vorhast, gebe ich dir erstmal ein paar grundsätzliche Hinweise, dann können wir ja immer noch konkrete Probleme diskutieren.

user profile iconDie Brotmafia hat folgendes geschrieben:
Der Server hat die Internet Client Socket Componente, und der Client die Internet Server Socket Componente.

Ähm, dir ist schon aufgefallen, dass du das genau andersrum verwendest, als es gedacht ist, ja? :wink: Dass es dann zwangsläufig zu "interessanten" Problemen kommt, ist dann ja klar...

user profile iconDie Brotmafia hat folgendes geschrieben:
Mit dem bisherigen Server geht das nicht, da die Internet ClientSocket Komponente ja nur Befehle empfangen, aber nicht versenden kann...
[...]
Server mit der Client Komponente meinem Client mit der Server Komponente was schicken könnte, dann wären gleich alle Probleme gelöst, aber das geht ja glaub ich nicht ?

Klar kann man mit dem TServerSocket und dem TClientSocket Daten senden und empfangen, in beiden Richtungen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
// Client-Seite (TClientSocket) - Senden:
ClientSocket1.Socket.SendText('Hallo');

// Client-Seite (TClientSocket) - Empfangen:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ShowMessage(Socket.ReceiveText);
end;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
// Server-Seite (TServerSocket) - Senden:
  ServerSocket1.Socket.Connections[0].SendText('Antwort');
  // statt "0" muss hier die entsprechende Nr. der Client-Verbindung angegeben werden

// Server-Seite (TServerSocket) - Empfangen:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ShowMessage(Socket.ReceiveText);
end;

Die entsprechenden Ereignisse (OnRead) sind natürlich im Objekt-Inspector korrekt zuzuweisen, also nicht einfach die Prozeduren erstellen oder c&p!

user profile iconDie Brotmafia hat folgendes geschrieben:
Ich muss mich ja zuerst zum Server connecten, also vorher war das kein Problem, da connectete sich der Server
[...]
Vorher konnte mein Server super funktionieren weil er sich super zu mir connected hat, da no-ip und so.
Nun hat der Server die Internet ServerSocket Componente, und nun muss ich mich zu ihm connecten.
Ich hab natürlich seine Ip nicht.

Ach, irgendwie hat das was gebetsmühlenartiges... :| Der Server ist der zentrale Dienst, bei dem sich die Clients melden und eine Verbindung aufbauen, nicht anders rum. Fazit: du brauchst die Adresse des Servers, ob als IP oder Host-Name ist erstmal egal; aber ohne die Adresse des Servers wird das alles nix! Deshalb hat man das DNS erfunden. Das könnte auch was für dich sein, deshalb schau mal bei z.B. www.dyndns.org

user profile iconDie Brotmafia hat folgendes geschrieben:
Noch nen Problem was mich sehr unzufrieden macht ist auch, dass sobald ich im Server die ServerSocket Komponente einsetze, ich immer ein Problem kriege auch wenn ich jetzt bei meinem Chat die Ip vom Server habe, aber wenn der Server Pc dann nen Router hat wars das auch schon wieder

Auch hier wieder, Gebetsmühle... :wink: Wenn du in einem LAN hinter einem Router (konkret: NAT-Box) einen (öffentlichen) Serverdienst anbieten willst, dann mußt du im Router ein Portforwarding einrichten (heißt auch Virtual Server und was sich die Router-OS-Hersteller noch alles für Namen haben einfallen lassen... :?), zumindest für TCP-Verbindungen. Es gibt auch eine Lösung auf UDP-Basis (UPD-hole-punching, aber nur für Expterten, keine Flusskontrolle und es ist auch noch ein Webserver als "Vermittlungsstelle" nötig).

cu
Narses

PS: gibt schreibt man ohne "e". :wink:


Zuletzt bearbeitet von Narses am Mo 18.02.08 02:54, insgesamt 1-mal bearbeitet
Die Brotmafia Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110

Win XP Suse Linux 9.3
Delphi 7 Enterprise, Delphi 2005
BeitragVerfasst: Di 22.11.05 21:08 
ClientSocket1.Socket.SendText('Hallo');

Danke, das war alles was ich gebraucht habe ;)

xD, das mit dem giebt.... naja.... ich hab in meinem Deutsch Aufsatz (10.Klasse vor 2 Wochen) 22 Fehler (auf 4 Seiten, etwas schlampig) und davon 12 mal gibt mit ie geschrieben °_°