不知道大家看过《DELPHI COM深入编程这本书没有》,看过的可还记得第四章中COM事件的讲述?书中讲述了如何用COM的事件技术来制作一个简单的聊天服务器--开始是只能响应一个客户的例子,然后扩展到能够同时连接多个客户端!其中有这么一段代码:
procedure TEventInt.SendText(const Text: WideString);
var Enum:IEnumConnections;
ConnectData:TConnectData;
FetchED:cardinal;
begin
Enum:= GetEnumerator;
if Enum<>nil then
begin
while Enum.Next(1,ConnectData,@fETCHED)=S_OK do
if ConnectData.pUnk<>nil then
(ConnectData.pUnk as IeventIntEvents).OnText(Text);
end;
end;这个过程的作用是把某一客户端发来的文本及时传送到所有的客户端!问题是这样的:
这个聊天服务器本地既是响应没有任何问题,能把信息传送到的客户断!但如果把客户端放到其他机器上,则不能把信息传送到的客户断,跟踪后发现问题出在这个
Enum.Next(1,ConnectData,@fETCHED)=S_OK
上,似乎一放到不同机器上,就不能枚举出哪些客户端连在上面!而在本地则没有任何问题大家帮忙看一下问题出在哪里!
procedure TEventInt.SendText(const Text: WideString);
var Enum:IEnumConnections;
ConnectData:TConnectData;
FetchED:cardinal;
begin
Enum:= GetEnumerator;
if Enum<>nil then
begin
while Enum.Next(1,ConnectData,@fETCHED)=S_OK do
if ConnectData.pUnk<>nil then
(ConnectData.pUnk as IeventIntEvents).OnText(Text);
end;
end;这个过程的作用是把某一客户端发来的文本及时传送到所有的客户端!问题是这样的:
这个聊天服务器本地既是响应没有任何问题,能把信息传送到的客户断!但如果把客户端放到其他机器上,则不能把信息传送到的客户断,跟踪后发现问题出在这个
Enum.Next(1,ConnectData,@fETCHED)=S_OK
上,似乎一放到不同机器上,就不能枚举出哪些客户端连在上面!而在本地则没有任何问题大家帮忙看一下问题出在哪里!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货