INDY控件 的TCPClient控件和TCPServer使用的时候碰到下面的问题:
TCPClient用来连接到服务器,可以发送数据,但是,不能主动接收TCPServer发来的数据,只能自己发一条,然后立即收一条。如果我用TCPServer,要广播一个消息,那客户端怎么接收啊?难道只能TCPClient主动发了命令后才能接收消息么?请做过的朋友,给予解答。如果有其他控件也可以提出来,但是不要说自己从头写一个,那样太费时间了。我需要的是客户端和服务器端连接上以后都可以主动收发消息。另外我客户端是在私网内的,所以请不要提出在客户端放一个服务端控件的想法,因为服务器不能连接到客户机的。只能由客户端去连接服务端。
TCPClient用来连接到服务器,可以发送数据,但是,不能主动接收TCPServer发来的数据,只能自己发一条,然后立即收一条。如果我用TCPServer,要广播一个消息,那客户端怎么接收啊?难道只能TCPClient主动发了命令后才能接收消息么?请做过的朋友,给予解答。如果有其他控件也可以提出来,但是不要说自己从头写一个,那样太费时间了。我需要的是客户端和服务器端连接上以后都可以主动收发消息。另外我客户端是在私网内的,所以请不要提出在客户端放一个服务端控件的想法,因为服务器不能连接到客户机的。只能由客户端去连接服务端。
var
Count: Integer;
List : TList;
EMote,
Msg : String;
begin
Msg := Trim(TheMessage); EMote := Trim(memEMotes.Lines.Values[Msg]); if WhoFrom <> 'System' then
Msg := WhoFrom + ': ' + Msg; if EMote <> '' then
Msg := Format(Trim(EMote), [WhoFrom]); List := tcpServer.Threads.LockList;<-遍历所有以连接的客户端
try
for Count := 0 to List.Count -1 do
try
//发消息
TIdPeerThread(List.Items[Count]).Connection.WriteLn(Msg);
except
TIdPeerThread(List.Items[Count]).Stop;
end;
finally
tcpServer.Threads.UnlockList;
end;
end;