TServerSocket居然不能绑定多个IP环境下的另一个IP地址(100分)

  • 主题发起人 主题发起人 zzz
  • 开始时间 开始时间
Z

zzz

Unregistered / Unconfirmed
GUEST, unregistred user!
我的服务器有多个IP,但是TServerSocket控件只是去取缺省的IP,我想向
它赋一个IP,怎么办?
 
Server Socket是不需要绑定IP的,对本机任何一个IP的访问都会激活ServerSocket,
并非"TServerSocket控件只是去取缺省的IP",
此时Socket参数的LocalAddress可以得知本机是哪一个IP被绑定.

例如:修改 Delphi 的Chat Demo,可以这样测试:

procedure TChatForm.ServerSocketAccept(Sender: TObject;
Socket: TCustomWinSocket);
begin
IsServer := True;
Statusbar1.Panels[0].Text := 'Connected to: ' + Socket.RemoteAddress+' by '+Socket.LocalAddress;
end;
 
唉,如果你使用 ics ... 是可以实现的。
 
我的意思是<b>我想向TServerSocket指定一个特定的IP</b>,如何做?
 
to zzz
你是不是想说只用一个IP的断口监听,这只能从clientsocket
去做,serversocket总是被动的,而clientsocket是主动的
 
我一开始就明白你的意思,我说的方法已经可以解决这个问题了:

定义 AcceptIP:string;

//somewhere
AcceptIP:='192.168.0.131'

procedure TChatForm.ServerSocketAccept(Sender: TObject;
Socket: TCustomWinSocket);
//...
if Socket.LocalAddress<>AcceptIP then Socket.Close //拒绝
else ...
end;
 
btw:要想做的漂亮一点,derive一个socket component,加上一个string property,
再把accept事件修改一下, 就可以了.
总之办法多多,原理一样.
 
接受答案了.
 
后退
顶部