【发布时间】:2013-12-12 18:52:45
【问题描述】:
我想知道一种使用 Indy 10 TidTCPServer 处理“一对多”通信的好方法,即从客户端接收流,并立即将此数据写入所有连接的“查看器”。这里的重点是数据的来源来自客户端(而不是服务器)。
在 OnExecute 过程中,我无法从那里写入其他连接的客户端,使用 LockList 只会冻结当前线程,因此无济于事...
我应该使用不同的线程来处理缓冲区交换吗?
缓冲区数据主要是字节,客户端已经连接,比如说3(#1发送,#2和#3应该接收)
这是我的 OnExecute 过程中的内容:
var
lst: Tlist;
[..]
lst := idTcpServer1.Contexts.LockList;
try
for i := 1 to lst.Count-1 do
begin
try
TIdContext(lst.Items[i]).Connection.IOHandler.Write('Test');
except
end;
end;
finally
idTcpServer1.Contexts.UnlockList;
end;
【问题讨论】:
-
你是如何使用 LockList 的?请显示一些代码。什么类型的数据?你已经有连接了吗?