Autor Beitrag
testra
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Fr 29.09.06 11:56 
Hallo,

ich habe ein Problem bei Socket-Programmierung.
:shock:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

Win XP
D7
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Fr 29.09.06 15:49 
Hi

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.ClientSocketConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
        //Edit13.Text:=ServerSocket1.Socket.RemoteAddress;
        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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 29.09.06 16:11 
Moin!

user profile icontestra 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! :D

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
testra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: 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 :oops: .(Domain des Firmenservers z.b)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Fr 29.09.06 17:42 
Hallo,

das hat mir schon einen schritt weitergeholfen, das mit der win-api. :les:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 30.09.06 10:30 
Moin!

user profile icontestra 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.

user profile icontestra 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. :roll: ;)

Mach doch mal ein schönes, ausfürliches Beispiel, auch mit Wertebeispielen, hm? :D 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: So 01.10.06 12:46 
Hi, :oops: :oops:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 02.10.06 00:05 
Moin!

user profile icontestra hat folgendes geschrieben:
wie man den eigenen localhost ausgibt,

Hä? :nixweiss:
user profile icontestra hat folgendes geschrieben:
auch den an den Firmenserver z.b. angemeldeten computernamen ausgibt,

Hääää?!? :nixweiss:
user profile icontestra hat folgendes geschrieben:
aber den namen des firmenservers z.b.,

S.o., GetComputerName() auf dem Server ausführen. :?
user profile icontestra 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. :?
user profile icontestra 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... :shock: :hair:

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



BeitragVerfasst: 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.... :oops:
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 02.10.06 12:34 
Moin!

user profile icontestra 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?! :shock: Wozu soll das gut sein... :gruebel:

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



BeitragVerfasst: 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... :les:
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 02.10.06 14:37 
Moin!

user profile icontestra hat folgendes geschrieben:
müsste ich schon das, was ich brauche, also die dns nummer vom gesamten stream ausschneiden.

wie das wohl geht... :les:

Du kennst das doch schon: ;)
Neue Frage -> neuer Thread. :mahn: :D


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... :nixweiss:

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? :gruebel:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
testra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: 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. :roll:
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 02.10.06 14:46 
Moin!

user profile icontestra hat folgendes geschrieben:
Mit ClientSocket1.Socket.RemoteHost im verbundenen Zustand leider nur localhost, also nicht die IP. :roll:

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. :roll: ;)

user profile icontestra 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. :D 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mo 02.10.06 14:51 
ok werde gleich versuchen, :les:

bin dann

Danke
testra Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 04.10.06 12:54 
Moin!

Mein lieber user profile icontestra, wie immer bei deinen Ausführungen verstehe ich kein Wort :rofl: (du machst wiedersprüchliche Aussagen und vermischst offensichtlich reichlich Begriffe)... :nixweiss:

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... :roll: :| :(

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.