首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Indy Server的多个绑定作为单独的套接字?

使用Indy Server的多个绑定作为单独的套接字?
EN

Stack Overflow用户
提问于 2012-06-08 04:48:49
回答 1查看 7.5K关注 0票数 6

我还在适应Indy,它是一个具有巨大功能的多线程套接字系统。我见过的最重要的事情之一是服务器套接字可以有许多不同的绑定。例如,对于同一IP地址上的3个端口,可以有3个绑定。我在Delphi XE2上使用Indy10。

我正在重新构建我的旧系统,它使用来自ScktComps的老式TServerSocketTClientSocket组件,并使用Indy TIdTCPServerTIdTCPClient重新构建。旧系统实际上由3个完全不同的服务器/客户端套接字组成,每个套接字服务于不同的目的,并且协同工作-类似于FTP如何使用一个套接字来存储二进制数据,而另一个套接字来存储命令。

是否可以使用这些绑定在同一组件中模拟三个独立的服务器/客户端套接字?如果我可以只声明一个服务器套接字,绑定了3个端口,在客户机上也是如此,连接到服务器上的3个不同端口,那就太好了。我想做的就是消除创建3个独立的服务器/客户端套接字组件的需要,并将它们组合到一个组件中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-08 08:19:36

可以,您可以使用单个TIdTCPServer同时管理多个端口。在客户端,您仍然需要3个不同的客户端组件来连接到不同的端口。

TIdTCPServer.Bindings集合中创建3个条目,每个条目对应于您要侦听的每个本地IP/端口,其中TIdSocketHandle.Port属性相当于TServerSocket.Port属性。TServerSocket本身并不支持绑定到特定的IP (尽管可以通过一些手动操作来完成),但TIdSocketHandle.IP属性可用于此目的,其中空白字符串等效于INADDR_ANY

TIdCPServer.OnConnectTIdCPServer.OnDisconnectTIdCPServer.OnExecute事件中,可以使用TIdContext.Binding.IPTIdContext.Binding.Port属性来区分调用套接字连接到的绑定。

它的常见用途是支持不同端口上的SSL和非SSL客户端,例如支持不同端口上的隐式和显式SSL/TLS的POP3和SMTP之类的协议。TIdHTTPServer这样做是为了在一台服务器上支持HTTP和TLS(您可以使用TIdHTTPServer.OnQuerySSLPort来自定义哪些端口使用HTTPS /TLS,哪些端口不使用)。

例如:

代码语言:javascript
运行
复制
procedure TForm1.StartButtonCick(Sender: TObject);
begin
  IdTCPServer1.Active := False;
  IdTCPServer1.Bindings.Clear;

  with IdTCPServer1.Bindings.Add do
  begin
    IP := ...;
    Port := 2000;
  end;

  with IdTCPServer1.Bindings.Add do
  begin
    IP := ...;
    Port := 2001;
  end;

  with IdTCPServer1.Bindings.Add do
  begin
    IP := ...;
    Port := 2002;
  end;

  IdTCPServer1.Active := True;
end;

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
begin
  case AContext.Binding.Port of
    2000: begin
      // do something...
    end;
    2001: begin
      // do something else...
    end;
    2002: begin
      // do yet something else ...
    end;
  end;
end;
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10939650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档