请问如何才能从一个TSocket对象来获得该连接的目标IP地址和端口? ( 积分: 50 )

  • 主题发起人 主题发起人 anick
  • 开始时间 开始时间
A

anick

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,我对TSocket对象不了解,说是整形,但不知道这个是不是该连接的句柄
另外还有一个buf是收到的内容,我想应该可以从这两个对象中获得IP和端口的
但是就是不知道用什么函数,该如何转换一下,望知道的朋友赐教一下,当然越详细越好!
 
如题,我对TSocket对象不了解,说是整形,但不知道这个是不是该连接的句柄
另外还有一个buf是收到的内容,我想应该可以从这两个对象中获得IP和端口的
但是就是不知道用什么函数,该如何转换一下,望知道的朋友赐教一下,当然越详细越好!
 
楼主自己去看TCustomSocket的代码吧, 在ScktComp单元,下面代码中的FSocket就是TSocket类型的,也就是所谓SocketHandle,楼主说的句柄

function TCustomWinSocket.GetRemoteHost: string;
var
SockAddrIn: TSockAddrIn;
Size: Integer;
HostEnt: PHostEnt;
begin
Lock;
try
Result := '';
if not FConnected then Exit;
Size := SizeOf(SockAddrIn);
CheckSocketResult(getpeername(FSocket, SockAddrIn, Size), 'getpeername');
HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.s_addr, 4, PF_INET);
if HostEnt <> nil then Result := HostEnt.h_name;
finally
Unlock;
end;
end;

function TCustomWinSocket.GetRemoteAddress: string;
var
SockAddrIn: TSockAddrIn;
Size: Integer;
begin
Lock;
try
Result := '';
if not FConnected then Exit;
Size := SizeOf(SockAddrIn);
CheckSocketResult(getpeername(FSocket, SockAddrIn, Size), 'getpeername');
Result := inet_ntoa(SockAddrIn.sin_addr);
finally
Unlock;
end;
end;

function TCustomWinSocket.GetRemotePort: Integer;
var
SockAddrIn: TSockAddrIn;
Size: Integer;
begin
Lock;
try
Result := 0;
if not FConnected then Exit;
Size := SizeOf(SockAddrIn);
CheckSocketResult(getpeername(FSocket, SockAddrIn, Size), 'getpeername');
Result := ntohs(SockAddrIn.sin_port);
finally
Unlock;
end;
end;
 
thank,我先看看再说
 
我的妈呀,真的是太简单了

CS := TCustomWinSocket.Create(st);
SendData(CS.RemoteAddress+','+inttostr(CS.RemotePort));

这样居然都可以,谢谢,谢谢
 
接受答案了.
 
后退
顶部