请教!在服务端如何取得客户端的ip地址(100分)

  • 主题发起人 主题发起人 xzhifei
  • 开始时间 开始时间
X

xzhifei

Unregistered / Unconfirmed
GUEST, unregistred user!
本人想用TServerSocket和TClientSocket写一个Internet的测试程序,情况如下:
一台服务器,具有固定IP,使用服务端;
一台客户机,用局域网上网,使用客户端;
目前可从客户端连接到服务端,但是服务器端无法得到客户端的IP地址!

请问有什么办法能解决这个问题,最好有源程序,谢谢!!
 
我以前开发的软件是在客户端获取IP送到服务端的,(Tsocketconnect)
从服务端获取IP地址,我也没有试过,如果你得到办法,请告诉我一下
 
对了,忘了,是使用WSAstartup等网络函数
 
感谢chxm_sword

还有没有人帮我啊
 
既然客户端有程序,为什么不在客户端取得后发送到服务器端呢? 何必绕圈子呢?

function TfrmBillWriteAncestor.LocalIP:string;//获得本机的ip地址
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe : PHostEnt;
pptr : PaPInAddr;
Buffer : array [0..63] of char;
I : Integer;
GInitData : TWSADATA;
BEGIN
WSAStartup($101, GInitData);
Result := '';
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
IF phe = nil THEN Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^ <> nil do BEGIN
result:=StrPas(inet_ntoa(pptr^^));
Inc(I);
END;
WSACleanup;
END;

在interface
uses 加入winsock单元.
 
客户端取得的IP好象不行,因为我想让服务端得到IP后,然后用做点对点的事情
 
serversocket1.Socket.RemoteAddress;
 
var
cl : TClientSocket;
sr : TServerSocket;
begin
cl.Socket.LocalAddress;
cl.Socket.LocalHost;

sr.Socket.Connections.LocalAddress;
sr.Socket.Connections.LocalHost;

 
上面的方法好象不行哦
 
sr.Socket.Connections.LocalAddress 这句不行吗?
根据i来取连接的地址,不行?
 
从客户端发IP到服务端有局限性,比如通过代理上网的客户端(代理服务器可能是动态IP)
其实DELPHI里的DEMO里有,就是哪个CHAT例子
 
多人接受答案了。
 
后退
顶部