客户端代码:
procedure Treceivemsg.Execute ;
begin
while not terminated do
begin
if form1.IdTCPClient1.Connected then
begin
msg:=form1.IdTCPClient1.ReadLn;
form1.memo1.Text:=msg+#10+form1.memo1.text;
sleep(100)
end;
end;
end;
服务器端代码:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  i : Integer;
begin
  try
    with IdTCPServer1.Threads.LockList do
    for I := 0 to Count - 1 do
    begin
      AThread := Items[I];
      if AThread.Connection.Socket.Binding.PeerIP = 'hostname' then
        AThread.Connection.WriteLn('ok');
    end;
  finally
    IdTCPServer1.Threads.UnlockList;
  end;
end;
现在问题是,服务端可以正常接受每个客户端发来的信息。但当服务器端向客户端发送信息时,客户端接收不到信息???这是怎么回事???盼复。。谢谢

解决方案 »

  1.   

    Treceivemsg是窗体的名字吗?我也为这个发愁,也是接收的问题。
    procedure Tfrm_wwwifc_main.BitBtn2Click(Sender: TObject);
    var
      s:string;
      temp:char;
    begin
      s:='GI'+'|'+'RN'+guestinfo.gbefroom+'|'+'GN'+guestinfo.gname+'|'+'PW'+guestinfo.gpassword+'|';
      busy:=true;
      IdTCPClient1.Write(chr(2)+s+chr(3));
      //sleep(1000);
      temp:=IdTCPClient1.ReadChar;
      if temp=chr(6) then
         memo1.lines.Add(formatdatetime('YYYY-MM-DD HH:MM:SS',now)+'发送'+guestinfo.gname+'\'+guestinfo.gbefroom+'的入住请求成功');
      busy:=false;
    end;//temp:=IdTCPClient1.ReadChar;
    //  if temp=chr(6) then
    //    memo1.lines.Add(formatdatetime('YYYY-MM-DD HH:MM:SS',now)+'发送'+guestinfo.gname+'\'+guestinfo.gbefroom+'的入住请求成功');
    这样刚发送完就接收可以接收到服务器的数据。
    但我的程序的服务器端只允许一个线程和它通信。UP    UP  学习中
      

  2.   

    Treceivemsg是一个线程吧。那你每一次接收都要创建一个线程吗。
      

  3.   

    客户端收不到信息的问题,我已经解决了。就是将下面的语句去掉:
    if AThread.Connection.Socket.Binding.PeerIP = 'hostname' then
    我试着输出了AThread.Connection.Socket.Binding.PeerIP后,结果显示是每个客户端的IP。但是这句话却判断是否等于hostname,那么当然不等于了。我去掉后,每个客户端就可以同时收到信息了。但是不知道些这段代码的人为何要加上这句话还有一个问题,现在虽然每个客户向服务器端发送数据,服务端和每个客户端都可以同时接收到。但我刚才进行了如下测试:
    在每个客户端发送事件里,写入了一个循环,让每次点击发送信息时,客户端一次性向服务器端发送100次信息。但是当两个客户端一同向服务器一次性发送100条信息时,两个客户端就会出现掉线问题。然后再也连接不上服务器了。这是怎么回事?
      

  4.   

    请问harvesthouhao (): 
    服务器端会不定时的发数据过来。我不知道
    怎么监听服务器端是否发了数据过来。idTCPclient,只有有限的以下事件:
    onconnecting;onstatus;onwork;workbegin;workend;
    没有onreving这样的事件,我怎么监听到服务有数据过来,再去缓冲区去读呀。
      

  5.   

    harvesthouhao()的接收的方法是正确的。我的问题已经解决了。谢谢。