我有一个程序server用idtcpserver监听
我希望当我点击一个按钮的时候通过
以下的方式
procedure TForm1.Button3Click(Sender: TObject);
var
  LThreads : TList;
  buff : array[0..1024] of char;
  i : integer;
begin
  LThreads := idtcpserver1.Threads.LockList;
  try
    for i := 0 to LThreads.Count - 1 do
    begin
        TIdPeerThread(LThreads[i]).Connection.Socket.Send(buff, 1024);
      end;
    finally
      idtcpserver1.Threads.UnlockList;
    end;
end;
来发送一个buff到所有连接上来的客户端,但是客户端收不到消息
是不是indytcp的athread只能在execute等idtcpserver的事件中才能用?
有什么办法可以在其他过程中用athread.connection.socket.send()吗?

解决方案 »

  1.   

    这句
    TIdPeerThread(LThreads[i]).Connection.Socket.Send(buff, 1024);
    应改为
    TIdPeerThread(LThreads[i]).Connection.Socket.Send(buff[0], 1024);
      

  2.   

    问题出在客户端代码,客户端要用个线程循环ReadLn。
      

  3.   

    procedure TForm1.Button3Click(Sender: TObject);
    var
      buff : array[0..1024] of char;
      i : integer;
    begin
      idtcpserver1.Threads.LockList;
      try
        for i := 0 to idtcpserver1.Threads.Count - 1 do
        begin
            idtcpserver1.Threads。Connection.Socket.Send(buff, 1024);
          end;
        finally
          idtcpserver1.Threads.UnlockList;
        end;
    end;
      

  4.   

    谢谢楼上各位
    搞定了
    wenhui1215()
     idtcpserver1.Threads。Connection.Socket.Send(buff, 1024);
    你这样写是不行的
    要转成tidpeerthread才有connection.socket问题确实是出在客户端,他们原来写的程序在buff里加了校验位,
    在buff里写入校验位就好了