| Autor |
Beitrag |
testra
      
Beiträge: 33
|
Verfasst: Fr 29.09.06 11:56
Hallo,
ich habe ein Problem bei Socket-Programmierung.
mit Socket.RemoteHost oder Socket.LocalAdress wird vom Client localhost bzw. 127.0.0.1 ausgegeben ( bei ServerSocket - Events).
Bei ClientSocket - Events das gleiche.
Der Name des Rechners, der beim Server angemeldet ist wird auch ausgegeben.
Ich suche eine Funktion (Möglichkeit)dass den Name der Servers selbst ausgibt.
|
|
soisseteben
      
Beiträge: 111
Win XP
D7
|
Verfasst: Fr 29.09.06 12:36
Hi,
das kann nur daran liegen, das du Server und Client auf ein und dem selben Rechner laufen lässt.
/EDIT: hab dich glaub ich falsch verstanden. Also, du bekommst doch bei einem ClientSocket-Event die Socket mitgeliefert. Willst du dir jetzt daraus den Namen des Servers ermitteln, kannst du das über:
Delphi-Quelltext 1:
| (Socket as TClientSocket).RemoteHost |
realisieren.
Hoffe jetzt liege ich richtig.
_________________ „Wer nur nach dem Zweck der Dinge fragt, wird ihre Schönheit nie entdecken.“ - (Halldór Laxness)
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 29.09.06 13:33
Moin!
Ich fasse mal zusammen, damit ich sicher bin, dass ich dich richtig verstanden habe:
Du hast einen Client, der verbindet sich zum Server und der Client soll den Computernamen (nicht den Hostnamen!) des Servers auslesen. Korrekt?
Das geht nicht mit den Eigenschaften/Methoden der Sockets, da diese Information nicht kommunikationsrelevant ist.
Deshalb mußt du einen Befehl vom Client an den Server senden, der vom Server verarbeitet wird (Computername lokal am Server auslesen) und das Ergebnis wieder an den Client senden.
Dazu wirst du vermutlich bereits ein Protokoll benötigen, nur so als Hinweis.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
testra 
      
Beiträge: 33
|
Verfasst: Fr 29.09.06 15:49
Hi
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.ClientSocketConnect(Sender: TObject; Socket: TCustomWinSocket); begin Checkbox2.Checked:=true; Edit10.Text:=Socket.LocalAddress; Edit11.Text:=Socket.LocalHost; Memo2.Lines.Clear; edit7.Text:=''; Button1.Enabled:=true; Edit13.Text:=Socket.RemoteAddress;
end; |
genau hier dachte ich ,dass ich als RemoteAdress eher den Servernamen kriege, ich kriege aber nur localhost
Danke
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 29.09.06 16:11
Moin!
testra hat folgendes geschrieben: | | genau hier dachte ich ,dass ich als RemoteAdress eher den Servernamen kriege, ich kriege aber nur localhost |
a) Wovon reden wir hier: Computername oder Hostname?
b) Wenn Server und Client auf der gleichen Maschine laufen, dann ist "localhost" völlig korrekt.
c) .RemoteHost liefert den Hostnamen, .RemoteAdress liefert die IP-Adresse.
Was genau willst du da nun eigentlich machen, bitte ausführliche Beschreibung unter sorgfältiger Verwendung der korrekten Begriffe, bitte!
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
testra 
      
Beiträge: 33
|
Verfasst: Fr 29.09.06 16:15
^Hallo
ich will, den Computer-Namen ausgeben
und ich will, den Server-Namen ausgeben, der nicht auf der gleichen Maschine läuft  .(Domain des Firmenservers z.b)
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 29.09.06 16:28
Moin!
Sorry, aber ich verstehe leider immer noch nicht, was dein Problem ist. Also rate ich mal:
Wenn du hier:
Delphi-Quelltext 1:
| Edit13.Text := Socket.RemoteHost; |
einträgst, dann ist das alles, was du über die Socket-Verbindung herausfinden kannst. Wenn da eine Adresse und kein Hostname steht, dann ist das DNS auf diesem Rechner nicht verfügbar oder der Rechner ist nicht registriert.
Wie weiter oben beschrieben: wenn du den Computernamen des Servers am Client brauchst, dann mußt du den Server anweisen diesen auszulesen und dem Client zu senden. Das geht aber nicht mit den Sockets, sondern mit der Win-API.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
testra 
      
Beiträge: 33
|
Verfasst: Fr 29.09.06 17:42
Hallo,
das hat mir schon einen schritt weitergeholfen, das mit der win-api.
und ich habe die fkt. LookupAccountName gefunden. Ist eine win-api fkt.
würde es damit gehn? was müsste ich dazu einbinden(dll?)?
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 30.09.06 10:30
Moin!
testra hat folgendes geschrieben: | und ich habe die fkt. LookupAccountName gefunden.
[...]
was müsste ich dazu einbinden(dll?)? |
Ich dachte da eher an GetComputerName().  Kennt Delphi so, IMO.
testra hat folgendes geschrieben: | | würde es damit gehn? |
Keine Ahnung, ich habe ja noch nicht wirklich verstanden, was du da eigentlich machen willst. Und da du dich auch standhaft weigerst, das brauchbar zu erklären, kann ich dir auch nicht anders helfen, als zu raten.
Mach doch mal ein schönes, ausfürliches Beispiel, auch mit Wertebeispielen, hm?  Und noch besser: du packst auch gleich deinen Code (komplett) dazu.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
testra 
      
Beiträge: 33
|
Verfasst: So 01.10.06 12:46
Hi, | Zitat: | | Keine Ahnung, ich habe ja noch nicht wirklich verstanden, was du da eigentlich machen willst. |
ich dachte, das wäre inzwischen klar.
Ich habe in diversen tutorials gefunden, wie man einen chat bastelt, wie man den eigenen localhost ausgibt, auch den an den Firmenserver z.b. angemeldeten computernamen ausgibt, aber den namen des firmenservers z.b., bzw. die ip des firmenservers, wie man das ausgibt, habe ich nicht rausgefunden. Und genau das würde ich gerne wissen. Das war meine frage, ob es mit der win-api funktion geht.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 02.10.06 00:05
Moin!
testra hat folgendes geschrieben: | | wie man den eigenen localhost ausgibt, |
Hä?
testra hat folgendes geschrieben: | | auch den an den Firmenserver z.b. angemeldeten computernamen ausgibt, |
Hääää?!?
testra hat folgendes geschrieben: | | aber den namen des firmenservers z.b., |
S.o., GetComputerName() auf dem Server ausführen.
testra hat folgendes geschrieben: | | bzw. die ip des firmenservers, wie man das ausgibt, habe ich nicht rausgefunden. |
Vom Client aus: ClientSocket1.Socket.RemoteHost bzw. .RemoteAddress, hatte ich schon geschrieben.
testra hat folgendes geschrieben: | | Und genau das würde ich gerne wissen. Das war meine frage, ob es mit der win-api funktion geht. |
Sorry, ich gebe jetzt auf, ich verstehe dich nicht, ich kapier´s einfach nicht...
Vielleicht versteht dich ja jemand anders oder du bringst es doch noch über´s Herz, eine brauchbare Problembeschreibung zu liefern (wenn du nicht weißt, wie du das Problem beschreiben sollst, dann mach doch mal ein Beispiel mit Werten, die aussagekräftig für die von dir gesuchten Werte stehen; und wenn du ganz große Langeweile hast, dann machst du auch noch ein Anwendungsbeispiel, das dein Konzept erläutert).
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
testra 
      
Beiträge: 33
|
Verfasst: Mo 02.10.06 12:28
Hallo
es gibt ja unter der eingabeaufforderung die möglichkeit, mit ipconfig //all die mac-adresse rauszufinden, auch dhcp-server oder dns-server werden hier angezeigt. genau das, die dns-adresse brauche ich.
und darauf bezieht sich meine frage, ob das mit den socket-komp. geht und mit welcher funktion.
ich hoffe das war jetzt klar.... 
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 02.10.06 12:34
Moin!
testra hat folgendes geschrieben: | es gibt ja unter der eingabeaufforderung die möglichkeit, mit ipconfig //all die mac-adresse rauszufinden, auch dhcp-server oder dns-server werden hier angezeigt. genau das, die dns-adresse brauche ich.
und darauf bezieht sich meine frage, ob das mit den socket-komp. geht und mit welcher funktion. |
Du willst die Adresse des DNS-Servers ermitteln?!  Wozu soll das gut sein...
Aber egal, mit den Socket-Komponenten geht das jedenfalls nicht. Wenn du das über eine WinAPI lösen willst, dann schau mal nach IP-Helper-API im MSDN, ist aber schon nicht mehr so ganz einfach.
Deshalb: führ einfach den Kommandozeilenbefehl aus und werte das Ergebnis aus.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
testra 
      
Beiträge: 33
|
Verfasst: Mo 02.10.06 14:30
Hi,
ich weiss nicht ob das einfacher ist als das ganze mit der api-funktion zu machen,
denn über den ipconfig /all kann ich jetzt zumindest alles im memo-feld ausgeben, jedoch
müsste ich schon das, was ich brauche, also die dns nummer vom gesamten stream ausschneiden.
wie das wohl geht... 
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 02.10.06 14:37
Moin!
testra hat folgendes geschrieben: | müsste ich schon das, was ich brauche, also die dns nummer vom gesamten stream ausschneiden.
wie das wohl geht...  |
Du kennst das doch schon:
Neue Frage -> neuer Thread.
Aber, wenn ich ehrlich bin, entweder hast du überhaupt keine Ahnung von dem, was du da tust und du kannst einfach nicht beschreiben, was du wirklich willst (und deine Geheimniskrämerei ist dem nicht wirklich zuträglich; man muss dir ja die Infos aus der Nase popeln), oder du rennst aus den gleichen Gründen in eine total falsche Richtung...
Und du bist sicher, dass ClientSocket1.Socket.RemoteHost im verbundenen Zustand nicht doch das liefert, was du haben willst (nämlich den voll qualifizierten Hostnamen, sofern dein DNS das korrekt zurücklifert)? Du kannst auch mal in einer Kommandozeile "nslookup x.x.x.x" eingeben, wobei du x.x.x.x durch die Server-IP ersetzt. Ist es das, was du rausfinden willst?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
testra 
      
Beiträge: 33
|
Verfasst: Mo 02.10.06 14:41
Hi,
genau das ist es! mit nslookup Server IP, bekomme ich in der kommandozeile den namen, den ich brauche ( es funzt!)
Mit ClientSocket1.Socket.RemoteHost im verbundenen Zustand leider nur localhost, also nicht die IP. 
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 02.10.06 14:46
Moin!
testra hat folgendes geschrieben: | Mit ClientSocket1.Socket.RemoteHost im verbundenen Zustand leider nur localhost, also nicht die IP.  |
Dann laufen Server und Client auf der gleichen Maschine, da ist das Verhalten auch völlig OK. Das klappt nur dann, wenn es ein anderer PC ist, mit dem du da verbunden bist.
testra hat folgendes geschrieben: | | genau das ist es! mit nslookup Server IP, bekomme ich in der kommandozeile den namen, den ich brauche ( es funzt!) |
Dachte ich´s mir doch.  Wie oben gesagt, das klappt nur auf unterschiedlichen Maschinen. Ansonsten mach halt ein ReverseLookup mit GetNameByAddr, details in der WSA-Doku.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
testra 
      
Beiträge: 33
|
Verfasst: Mo 02.10.06 14:51
ok werde gleich versuchen,
bin dann
Danke
|
|
testra 
      
Beiträge: 33
|
Verfasst: Mi 04.10.06 12:48
MOin
ich habe es nun geschafft, den Servernamen mittels einer funktion (WSA Doku) zu kriegen (gethostbyname(hostname)). ich weiss aber nicht ( nur aus experimentierfreude ) ob das die sinnvollere methode ist, oder ob man mit Auslesen der Konsole ( mit nslookup kriegt man auch die Server-ip und namen ) oder vielleicht gar registry-eintrag auslesen, den Server-Namen erhalten sollte.
Danke
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 04.10.06 12:54
Moin!
Mein lieber testra, wie immer bei deinen Ausführungen verstehe ich kein Wort  (du machst wiedersprüchliche Aussagen und vermischst offensichtlich reichlich Begriffe)...
Deshalb zeig mir bitte mal den Quelltext (aber kommentiert!) dessen, was du da tust.  Und dazu bitte noch eine Beschreibung (ausführlich und verständlich) dessen, was eigentlich passieren sollte.
Anders kann ich dir nicht helfen, hab keinen Bock mehr auf Raten...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
|