TcpServer发送字符串TcpClient(delphi)

时间:2014-05-27 07:44:01

标签: delphi tcpclient tcpserver

如何收到邮件组件TcpSlient?

客户端:

procedure TForm1.client1Receive(Sender: TObject; Buf: PAnsiChar;
  var DataLen: Integer);
var
s: string;
begin
s := client1.Receiveln();
while s<>'' do begin
if s='CDOPEN' then
mciSendString('Set cdaudio door open wait', nil, 0, handle);
if s='CDCLOSE' then
mciSendString('Set cdaudio door closed wait', nil, 0, handle);
s := client1.Receiveln;
end;
end;

服务器

procedure TForm1.Button2Click(Sender: TObject);
var
st: AnsiString;
begin
st:='CDOPEN';
TcpServer1.Sendln(st);
end;

客户端不起作用((

1 个答案:

答案 0 :(得分:3)

TClientSocket和其他套接字库实现不同,OnReceive中的TTcpClient事件在有新数据可供读取时不会触发。它仅在调用ReceiveBuf()时触发(Receiveln()在内部使用)。因此,在Receiveln()内调用OnReceive是没有意义的,因为您必须在阅读操作中首先触发OnReceiveBuf参数提供已经读取的数据,并在OnReceive退出时返回给调用者。因此,OnReceive更像是OnAfterRead事件。要执行您尝试的操作,您需要定期调用Receiveln(),例如在计时器或循环中。没有事件要告诉你何时阅读。

在XE6中,仅供参考,TTcpClient(以及TTcpServer和其他相关类别)has been removed。因此,最好使用来自Indy,ICS,Synapse等的TClientSocket或第三方组件。