大佬教程收集整理的这篇文章主要介绍了delphi – 使用Indy Server的多个绑定作为单独的套接字?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在重建我的旧系统,它使用ScktComps的旧式TServerSocket和TClientSocket组件,并使用Indy TIdTCPServer和TIdTCPClient重新组装.旧系统实际上由每个端口上的3个完全不同的服务器/客户端套接字组成,每个套接字用于不同的目的,并且一起工作 – 类似于FTP如何使用一个套接字用于二进制数据而另一个套接字用于命令.
是否可以使用这些绑定模拟同一组件中的三个独立的服务器/客户端套接字?如果我只能声明一个绑定了3个端口的服务器套接字,并且在客户端上连接到服务器上的3个不同端口,那就太棒了.我想做的就是不再需要创建3个独立的服务器/客户端套接字组件并将它们组合成一个组件.
在TIdTCPServer.bindings集合中创建3个条目,每个条目对应要侦听的每个本地IP /端口,其中TIdSocketHandle.Port属性将等效于TServerSocket.Port属性. TServerSocket本身不支持绑定到特定IP(尽管可以通过一些手动工作完成),但TIdSocketHandle.IP属性用于此目的,其中空字符串与INADDR_ANY等效.
在TIdCPServer.onConnect,TIdCPServer.onDisconnect和TIdCPServer.onExecute事件中,您可以使用TIdContext.binding.IP和TIdContext.binding.Port属性来区分调用套接字连接的绑定.
这种情况的一个常见用途是支持不同端口上的SSL和非SSL客户端,例如POP3和SMTP等协议,这些协议支持不同端口上的隐式和显式SSL / TLs. TIdhttpServer执行此操作以在单个服务器上支持http和httpS URL(您可以使用TIdhttpServer.onQuerySSLPort来自定义哪些端口使用SSL / TLS而不是使用SSL / TLS).
例如:
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;
以上是大佬教程为你收集整理的delphi – 使用Indy Server的多个绑定作为单独的套接字?全部内容,希望文章能够帮你解决delphi – 使用Indy Server的多个绑定作为单独的套接字?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。