Entwickler-Ecke
Internet / Netzwerk - Server-Namen ausgeben
testra - Fr 29.09.06 11:56
Titel: Server-Namen ausgeben
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 - 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.
Narses - 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
testra - 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 - 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! :D
cu
Narses
testra - 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 - 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
testra - 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 - 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. :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
testra - 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 - Mo 02.10.06 00:05
Moin!
testra hat folgendes geschrieben: |
| wie man den eigenen localhost ausgibt, |
Hä? :nixweiss:
testra hat folgendes geschrieben: |
| auch den an den Firmenserver z.b. angemeldeten computernamen ausgibt, |
Hääää?!? :nixweiss:
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... :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
testra - 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 - 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?! :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 [
http://www.delphi-library.de/viewtopic.php?p=385387#385387] und werte das Ergebnis aus. ;)
cu
Narses
testra - 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 - 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... :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
testra - 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 - 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. :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: ;)
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. :D Wie oben gesagt, das klappt nur auf unterschiedlichen Maschinen. Ansonsten mach halt ein ReverseLookup mit GetNameByAddr, details in der WSA-Doku. ;)
cu
Narses
testra - Mo 02.10.06 14:51
ok werde gleich versuchen, :les:
bin dann
Danke
testra - 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 - Mi 04.10.06 12:54
Moin!
Mein lieber
testra, 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
testra - Mi 04.10.06 13:25
Hallo
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: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ScktComp, winsock, NB30;
type TForm1 = class(TForm) GroupBox1: TGroupBox; Label1: TLabel; Edit1: TEdit; ServerSocket1: TServerSocket; ServerBlock: TLabel; ClientBlock: TLabel; ClientSocket: TClientSocket; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure ServerSocket1ClientWrite(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocket1Accept(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure Button2Click(Sender: TObject);
procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientSocketConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject); function ExecConsole(const Command: String; var Output, Errors: String): Boolean; function GetLocalIPs: String;
private
public end;
var
implementation
{$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var port:integer; begin
port:=StrToInt(Edit1.Text); ServerSocket1.Port:=port; ServerSocket1.Active:=True; edit4.text:='Listening ...'; end;
procedure TForm1.Button1Click(Sender: TObject); begin if ServerSocket1.Active then begin ServerSocket1.Socket.Connections[0].SendText(edit6.text); edit6.text:=''; end; end;
procedure TForm1.ServerSocket1ClientWrite(Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add(Socket.ReceiveText); end;
procedure TForm1.ServerSocket1Accept(Sender: TObject; Socket: TCustomWinSocket); begin Checkbox1.Checked:=true; edit2.text:=Socket.RemoteAddress; edit3.Text:=Socket.RemoteHost; edit5.text:=Socket.LocalAddress; edit4.text:='Connected'; end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add(Socket.ReceiveText); end;
procedure TForm1.Button2Click(Sender: TObject); begin close; end;
function TForm1.GetLocalIPs: String; type PPInAddr= ^PInAddr; var wsaData: TWSAData; HostInfo: PHostEnt; HostName: Array[0..255] of Char; Addr: PPInAddr; begin Result:=''; if WSAStartup($0102, wsaData)<>0 then exit; try if gethostname(HostName, SizeOf(HostName)) <> 0 then exit; HostInfo:= gethostbyname(HostName); if HostInfo=nil then Exit; Addr:=Pointer(HostInfo^.h_addr_list); if (Addr=nil) or (Addr^=nil) then exit; Result:=StrPas(inet_ntoa(Addr^^)); inc(Addr); while Addr^<>nil do begin Result:=Result+^M^J+StrPas(inet_ntoa(Addr^^)); inc(Addr); end; finally WSACleanup; end; end;
procedure TForm1.Button4Click(Sender: TObject); var port,i,j:integer; Output, Errors: String; tmp,S2: TStringList;
begin if ServerSocket1.Active then begin port:=StrToInt(edit9.text); ClientSocket.Port:=port; ClientSocket.Host:=edit8.text; ClientSocket.ClientType:=ctNonBlocking; ClientSocket.Active:=true; Button3.Enabled:=true; Button5.Enabled:=true; Button6.Enabled:=false; end; end; end;
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:=GetLocalIPs; end;
procedure TForm1.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); var p:String; begin p:=Socket.ReceiveText; TextvomServer:=p; Memo2.Lines.Add(p); end;
procedure TForm1.Button3Click(Sender: TObject); begin ClientSocket.Socket.SendText(edit7.text); edit7.text:=''; end;
procedure TForm1.Button5Click(Sender: TObject); begin ServerSocket1.Close; ClientSocket.Close; Checkbox2.Checked:=false; Edit10.Text:=''; Edit11.Text:=''; Memo1.Lines.Clear; Memo2.Lines.Clear; Memo3.Lines.Clear; Memo4.Lines.Clear; edit7.Text:=''; Button1.Enabled:=false; Button3.Enabled:=false; Button4.Enabled:=false; Button6.Enabled:=true;
Checkbox1.Checked:=false; edit2.text:=''; edit3.Text:=''; edit5.text:=''; edit12.text:=''; edit4.text:='Disconnected.....';
end;
procedure TForm1.Button6Click(Sender: TObject); var port:integer; begin port:=StrToInt(Edit1.Text); ServerSocket1.Port:=port; ServerSocket1.Active:=True; edit4.text:='Listening ...'; Button4.Enabled:=true;
end;
function TForm1.ExecConsole(const Command: String; var Output, Errors: String): Boolean; var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; SecurityAttr: TSecurityAttributes; PipeOutputRead, PipeOutputWrite, PipeErrorsRead, PipeErrorsWrite: THandle;
function ReadPipeToString(const hPipe: THandle): String; const MEM_CHUNK_SIZE = 8192; var NumberOfBytesRead, NumberOfBytesTotal: Cardinal; begin Result := ''; NumberOfBytesTotal := 0; repeat SetLength(Result,Length(Result) +MEM_CHUNK_SIZE); if ReadFile(hPipe,(@Result[1+NumberOfBytesTotal])^,MEM_CHUNK_SIZE, NumberOfBytesRead,NIL) then Inc(NumberOfBytesTotal,NumberOfBytesRead); SetLength(Result,NumberOfBytesTotal); until (NumberOfBytesRead = 0); end;
begin FillChar(ProcessInfo,SizeOf(TProcessInformation),0); FillChar(SecurityAttr,SizeOf(TSecurityAttributes),0); SecurityAttr.nLength := SizeOf(SecurityAttr); SecurityAttr.bInheritHandle := TRUE; SecurityAttr.lpSecurityDescriptor := NIL; CreatePipe(PipeOutputRead,PipeOutputWrite,@SecurityAttr,0); CreatePipe(PipeErrorsRead,PipeErrorsWrite,@SecurityAttr,0); FillChar(StartupInfo,SizeOf(TStartupInfo),0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.hStdInput := 0; StartupInfo.hStdOutput := PipeOutputWrite; StartupInfo.hStdError := PipeErrorsWrite; StartupInfo.wShowWindow := SW_HIDE; StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; Result := CreateProcess(NIL,PChar(Command),NIL,NIL,TRUE, CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, NIL,NIL,StartupInfo,ProcessInfo); CloseHandle(PipeOutputWrite); CloseHandle(PipeErrorsWrite); if (Result) then begin Output := ReadPipeToString(PipeOutputRead); Errors := ReadPipeToString(PipeErrorsRead); WaitForSingleObject(ProcessInfo.hProcess,INFINITE); CloseHandle(ProcessInfo.hProcess); end; CloseHandle(PipeOutputRead); CloseHandle(PipeErrorsRead); end;
end. |
Narses - Mi 04.10.06 13:32
Moin!
Narses hat folgendes geschrieben: |
| Quelltext (aber kommentiert!) |
Keine Kommentare, nichtmal brauchbare Komponentennamen... (was soll bitte EditX sein!?) :shock:
Narses hat folgendes geschrieben: |
| eine Beschreibung (ausführlich und verständlich) dessen, was eigentlich passieren sollte. |
Kein weiteres Wort... :gruebel:
Narses hat folgendes geschrieben: |
| Anders kann ich dir nicht helfen, hab keinen Bock mehr auf Raten... :roll: :| :( |
cu
Narses
testra - Mi 04.10.06 13:40
Hallo,
die frage wäre, in das Edit-Feld edit13 den Servernamen zu schreiben, den ich mit den funktionen execconsole erhalte ( hier erhalte ich name + id des servers ) bei der procedure TForm1.ClientSocketConnect(..). Oder die nur die ip durch die funktion GetLocalIPs.
Welches wäre der bessere weg, oder gibt es einen weg, die server-ip bzw.-namen aus einem registry-eintrag auszulesen und ins feld edit13 einzutragen.
Narses - Mi 04.10.06 14:22
Moin!
OK, also um diese Prozedur geht es (was auch immer sie wohl tut... :gruebel:):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| 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:=GetLocalIPs; end; |
testra hat folgendes geschrieben: |
| die frage wäre, in das Edit-Feld edit13 den Servernamen zu schreiben, den ich mit den funktionen execconsole erhalte ( hier erhalte ich name + id des servers ) bei der procedure TForm1.ClientSocketConnect(..). Oder die nur die ip durch die funktion GetLocalIPs. |
Aha, du verwendest also auf dem Server einen ClientSocket... :gruebel: (und ich wundere mich schon die ganze Zeit, wovon du da immer redest)
Warum auch immer, halte ich zunächst mal für einen Konzeptfehler; nicht grundsätzlich immer, aber fast. ;)
Und du willst eigentlich die lokale(n) IP-Adresse(n) des PCs auslesen (ob das ein Server ist oder nicht, spielt dabei ja eigentlich erstmal keine Rolle), sowie den voll qualifizierten Hostnamen zu den IP(s)! :idea: (nebenbei: bei Servern ist es nicht ungewöhnlich, dass diese auch mehr als eine IP-Adresse haben!) Aber ehrlich gesagt frage ich mich schon die ganze Zeit, wozu in Gottes Namen der voll qualifizierte Hostname auf der Maschine selbst wohl gut sein soll (allenfalls die IP, wenn schon)... :gruebel:
testra hat folgendes geschrieben: |
| Welches wäre der bessere weg, oder gibt es einen weg, die server-ip bzw.-namen aus einem registry-eintrag auszulesen und ins feld edit13 einzutragen. |
Wenn es um diese Daten geht, rate ich grundsätzlich dazu, die WSA zu befragen. Zum einen steht die IP-Adresse nirgends in der Registry, wenn du mit DHCP arbeitest, zum anderen ist das was Windows-privates und in jeder Version sowieso irgendwie anders. Also: WSA ist schon der korrekte Ansatz.
Nochwas am Rande: du scheinst dich auf die Socket-Ereignisse als Signalisierung für Datenpakete zu verlassen (beim Überfliegen des Codes gesehen). Das ist im Allgemeinen ein Fehler, der dich noch Nerven kosten wird. ;)
Hier [
http://www.delphi-library.de/topic_Datenpakete+bei+den+SocketKomponenten+auseinanderhalten_56194.html] kannst du lesen, warum.
cu
Narses
testra - Mi 04.10.06 14:41
Hallo,
ich mache das ganze mit den sockets, um durch diese möglichkeit vom server die ip-adr. bzw. namen des servers (dns-name oder dhcp) zu erhalten, um den namen von meinem eigenen rechner zu erhalten, um den namen des mail-servers zu erhalten (ist die nächste aufgabe), um eine text-datei zu verschlüsseln und diese von einem server-pfad zu erhalten und dann zu entschlüsseln. Ich will alle daten miteinander vergleichen(ip's und verschl. text) und so für sicherheit sorgen.
So habe ich meine versuche angefangen, ich hoffe es war nicht der allzu falsche weg.... :?
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!