我初学delphi 想写个客户端程序 我用tcpclient连用vb写的服务器端 现在客户端能发送数据给服务器端 可是服务器发给客户端的数据我怎么在delphi中接收到? 我想应该自动触发TcpClient1Receive事件吧 可是我调试 总是不执行TcpClient1Receive里的东西  贴出代码让大家帮我看看
难道我要启动一个线程时刻检查有数据么?
我点按钮 会出来 send ok 提示 这是我在TcpClient1Send里写的 
我就是奇怪我用vb写的服务器端明明把数据发出来了 都显示发送成功了 delphi怎么也收不到 我用另外一个别人写的java的服务器端 连它也能显示java服务器端收到数据,并同时给她发回应信息,我在delphi中也收不到数据 为什么?
我以前用vb语言写tcp通信 接收数据都是有事件自动触发的 delphi中怎么做?procedure TForm1.Button1Click(Sender: TObject);  //点 按钮 发送数据
var
s:string;
bMsg:ByteArray;
  i: Integer;
begin
  try
    if tcpclient1.Connected then
    else
    begin
      tcpclient1.Connect;
    end;
    if tcpclient1.Connected then
     begin
      s:=getLoginXml('yutong','12345');
      bmsg:=getXmlBody('T001',s);
       i:=high(bmsg);
     i:=i+1;
 
      TcpClient1.SendBuf(bmsg[0],i);
           end;
  finally
   
  end;
end;procedure TForm1.TcpClient1Receive(Sender: TObject; Buf: PAnsiChar;
  var DataLen: Integer);
var
s:string;
begin
  s:=TcpClient1.Receiveln();
  showmessage(s);
  showmessage ('receivdve');
end;procedure TForm1.TcpClient1Error(Sender: TObject; SocketError: Integer);beginshowMessage('sock error'+intToStr(socketError));
end;procedure TForm1.TcpClient1Send(Sender: TObject; Buf: PAnsiChar;
  var DataLen: Integer);
begin
showmessage('send ok');   
end;

解决方案 »

  1.   

    因为你的TCPCLIENT是在阻塞方式下,就不会响应OnReceive事件.
      

  2.   

    如果我把TTcpclient的BlockMode设成bmNonBlocking  ,执行TcpClient1.Connect  返回false 
    怎么弄?
      

  3.   

    我现在知道 在让TCPCLIENT,直接让  TcpClient1.BlockMode :=bmNonBlocking;
      TcpClient1.Active :=True;
    就和帮定的ip  port连上了 不用再执行connect  可是在这种情况下 他仍旧不会自动响应onreceive事件,我的意思是说 我用vb写server在收到delphi下client发来的数据后立即向delphi返回数据 ,d下onreceive没反应