PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : client server frage


mcbrunox
07.09.2002, 19:58
Wie kann ich mit dem Client herausfinden welche IP Adresse mein Server hat ?
Kann mir da jemand ein CodeBeispiel geben...
thx


Manu
07.09.2002, 20:02
Solltest du es mit dynamischen IPs versuchen wollen, dann geht das gar nicht :)
Das ist ja das Prblem an der Sache. Das is die Problemstellung dezentraler P2P Netze. Du kannst das nciht ohne irgendwelche Anhaltspunkte rausfinden. Du kannst entweder IP Ranges abscannen, schauen ob dein Port auf ist und dann versuchen ob es dein Server ist. Was aber eine Million Jahre dauern würde ;)
Ansonsten weiche auf einen DynDns Service aus.

-> www.dyndns.org
-> www.d2g.com
-> ...

mfg, agent

mcbrunox
07.09.2002, 20:23
Ich werde es so lösen...
müsste ja funktionieren:
server: schicke eigene ip zu client
[hat eh immer die selbe ip]client: übernehme server ip

ach ja, hab jetz den fehler "WinSocket Fehler 10048 auf API 'bind' auf meinem Client...

was heisst das nu ? kennt sich da wer aus...

Manu
07.09.2002, 20:26
Wenn dein Client eh immer dieselbe IP hat, dann weiß ich nicht wirklich, wo das Problem ist. Sobald wenigstens eine IP immer fest is, is das ganze kein Problem mehr.

Und nur von einer Fehlermeldung kann dir hier denke ich mal keiner helfen, da musst du schon mehr Details rausrücken

mcbrunox
07.09.2002, 20:33
Also anhand des Codes habe ich Daten vom Client zum Server geschickt.
Dann wollte ich noch eine eigene IP Ermittlung einbauen(was auch funktionierte),und seit dem zeigt er mir beim client die oben angeführte Fehlermeldung.


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls,winsock;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Memo1: TMemo;
Client: TClientSocket;
Server: TServerSocket;
Button4: TButton;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
function 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.Button1Click(Sender: TObject);
begin

Server.Port:=44044;
Client.Port:=44044;
Client.Host:='xxx.xxx.xxx.xxx'; //Server IP
Server.Open;
Client.Open;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin

Client.Close;
Server.Close;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin

if Client.Active = true then Client.Socket.SendText(Edit1.Text);
Edit1.Text:='';

end;

procedure TForm1.ServerClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin

Memo1.Lines.Add(Socket.ReceiveText);

end;

procedure TForm1.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin

Memo1.Lines.Add('***Connected.')

end;

procedure TForm1.ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin

Memo1.Lines.Add('***Disconnected.');

end;

procedure TForm1.Button4Click(Sender: TObject);
begin
edit2.Text:=getlocalips;
end;

end.

mcbrunox
07.09.2002, 20:39
Hat sich erledigt...nach einem Neustart funktionierte es wieder.,..
danke trotzdem

Manu
07.09.2002, 20:39
Seh ich das richtig, dass du Client und Server in einer und derselben App hast?
Lass die Anwendung mal durch den Debugger und schau, in welcher Zeile der Fehler kommt.

Na dann..