TcpServer发送字符串TcpClient(delphi)

TcpServer发送字符串TcpClient(delphi),delphi,tcpclient,tcpserver,Delphi,Tcpclient,Tcpserver,如何接收消息组件TcpSlient 客户: 客户端不工作与TClientSocket和其他套接字库实现不同,TTcpClient中的OnReceive事件在有新数据可读取时不会触发。它仅在调用ReceiveBuf时触发,Receiveln在内部使用该函数。因此,在OnReceive内部调用Receiveln没有任何意义,因为您必须在读取操作中首先触发OnReceive。Buf参数提供已读取的数据,并在OnReceive退出时返回给调用方。因此,OnReceive的行为更像是OnAfterRead

如何接收消息组件TcpSlient

客户:

客户端不工作

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


仅供参考,TTcpClient和TTcpServer以及XE6中的其他相关类。因此,您最好使用TClientSocket或Indy、ICS、Synapse等的第三方组件。

不起作用或不够具体。它以什么方式不起作用。调试告诉了您什么?程序运行正常。运行客户端127.0.0.11488以运行服务器127.0.0.11488。单击打开CD-ROM,什么也没有发生调试告诉您什么?沟通发生了吗?是否发送消息?收到信息了吗?为什么在调用mciSendString时不检查错误?这个概念在我看来很奇怪。应该是客户端向服务器发送内容,而不是相反。
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;