如何获得本机的IP地址,在点对点通信程序中如何获得发消息过来的主机的IP地址

smuwcwt 2003-12-17 05:47:58
RT
...全文
18 点赞 收藏 20
写回复
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyq 2004-01-27
idudpserver
回复
smuwcwt 2004-01-27
好的,先试一下
回复
fontain 2004-01-26
把下面的这个包装上,在borland\delphi7\bin下面
dclsockets70.bpl(Borland Socket Components)
包括的控件:TClientSocket、TServerSocket
回复
smuwcwt 2004-01-24
UP
回复
smuwcwt 2004-01-23
真的没通过呀
回复
smuwcwt 2004-01-23
UP
回复
smuwcwt 2004-01-22
Delphi7.0好象通不过呀
回复
月光 2004-01-22
楼主,你连udp还是tcp/ip都不清楚吗?
回复
gdwyh 2004-01-20
获得本机IP:
function tloginfrm.getip: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
// returns ISP assigned IPf

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^[I] <> nil do begin
result:=StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;
回复
smuwcwt 2004-01-20
up
回复
Wyi23 2004-01-20
本机IP
uses
...
WinSock,
...

function LocalIP:string;
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^[I] <> nil do begin
result:=StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;
在Delphi6可以通过
回复
smuwcwt 2004-01-20
????楼上的兄弟说清楚点好吗?
回复
月光 2004-01-20
看看delphi自带的demo,udp就看udp,tcp/ip的我不记得在哪个目录,找找
回复
SuperFatcow 2004-01-19
我试了一下,好象确实不行,楼上的楼上讲清楚点啊
回复
smuwcwt 2003-12-26
真的不行呀
回复
2312 2003-12-18
把客户端IP一块发到服务器,然后进行分解!

获得本机IP:
procedure TF_main.getipaddress; //»ñµÃ±¾»úIPµØÖ·
var ip,ipstr:string;
ch:array[1..32] of char;
i:integer;
wsdata:twsadata;
myhost:phostent;
begin
if wsastartup(2,wsdata)<>0
then
begin
messagedlg('ûÓгɹ¦·µ»Ø£¡',mtinformation,[mbok],0);
halt(2);
end;
try
if gethostname(@ch[1],32)<>0 then
begin
messagedlg('ûÓгɹ¦·µ»Ø£¡',mtinformation,[mbok],0);
halt(3);
end;
except
messagedlg('ûÓгɹ¦·µ»Ø£¡',mtinformation,[mbok],0);
halt(3);
end;
myhost:=gethostbyname(@ch[1]);
if myhost=nil then
begin
messagedlg('ipµØַΪ¿Õ',mtinformation,[mbok],0);
halt(4);
end
else
begin
for i:=1 to 4 do
begin
ip:=inttostr(ord(myhost.h_addr^[i-1]));
ipstr:=ipstr+ip;
if i<4 then
ipstr:=ipstr+'.'
else
strIP:=ipstr;
end;
end;
end;

你可以写成函数
回复
crapex 2003-12-18
D7下面没有ServerSocket的,后面那个不行,但前面那个可以
是需要uses winsock
回复
smuwcwt 2003-12-18
好像在DELPHI 7下都不能运行呀
回复
quansui 2003-12-17
如果你不想编太多的代码的话用powersock控件吧。很方便获得本机IP
x:=Powersock1.LocalIP;
对方的IP:如果你使用的是WinSocket在这个事件中得到
procedure TSocketData.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
ClientIP:=Socket.RemoteAddress;
end;
回复
crapex 2003-12-17
1.本机IP
function LocalIP:string;
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^[I] <> nil do begin
result:=StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;
2.对方IP
ServerSocket1.Socket.Connections[i].RemoteAddress
回复
发动态
发帖子
网络通信/分布式开发
创建于2007-08-02

1565

社区成员

Delphi 网络通信/分布式开发
申请成为版主
社区公告
暂无公告