直接在Indy中的2个连接之间传输数据(TIdContext)

时间:2011-03-05 12:26:07

标签: delphi sockets delphi-7 indy10

运行TIdTCPServer的服务器,以及使用Web浏览器(或任何其他软件)进行通信的客户端,我不知道协议,但我想要做的是在客户端和另一个连接之间发送数据(两者都连接到相同的TIdTCPServer)例如,第一个客户端发送的数据被传输到第二个客户端,第二个客户端发送的数据被传输到第一个客户端,就像代理一样(我真的不能使用代理服务器,因为它就是这个条件)并且TIdTCPServer仍应接收其他客户端并处理其数据。

我偶然发现了第一行代码,因为TIdContext.Connection.Socket.ReadLn需要一个分隔符,而服务器不知道客户端的协议。

任何想法?

感谢。

1 个答案:

答案 0 :(得分:3)

您可以查看TIdMappedPortTCPTIdHTTPProxyServer的源代码,了解它们如何在两个方向上的连接之间传递任意数据。两个组件都使用TIdSocketList.SelectReadList()来检测何时连接有数据要读取。 TIdMappedPortTCP然后使用TIdBuffer.ExtractToBytes()TIdIOHandler.Write(TIdBytes),而TIdHTTPProxyServer则使用TIdTCPStreamTIdBuffer.ExtractToStream()