我使用TClientSocket与Python服务器进行套接字通信。意识到之后,使用TClientSocket只能在客户端上使用更多的东西,所以我决定使用INDY。我使用Delphi Indy为客户端和服务器制作了一个小测试应用程序。这行得通。

但是,现在它不适用于Python。 Python接收到连接,消息也很好,但是当它响应时,我的Delphi一无所获。我对fIdTCPClient1.IOHandler.ReadLn()的调用永远都在那里。

从非INDY服务器向INDY发送消息时,您需要做些特殊的事情吗?

procedure TForm3.Button3Click(Sender: TObject);
begin
  fIdTCPClient1 := TIdTCPClient.Create(nil);
  fIdTCPClient1.Port := 20200;
  fIdTCPClient1.Host := '127.0.0.1';//'localhost';
  fIdTCPClient1.Connect;
  fIdTCPClient1.IOHandler.WriteLn('You there');

  msg := fIdTCPClient1.IOHandler.ReadLn();
  ShowMessage(msg);
end;

Python端的连接
    HOST = '127.0.0.1'                                  # Localhost
    PORT = 20200

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.bind((HOST, PORT))
        s.listen(1)
    except socket.error:
        s.close()
        s = None
        return -1

Python发送/接收
data = conn.recv(4096).strip()
print data
conn.send('I am here')

最佳答案

函数IdTCPClient1.IOHandler.ReadLn()挂起并等待,直到从服务器接收到“行尾”(#13#10\r\n)。最后在服务器端添加\r\n响应。

10-08 17:02