【问题标题】:Indy TCP client ReadLn function hangsIndy TCP 客户端 ReadLn 函数挂起
【发布时间】:2013-10-19 23:15:14
【问题描述】:

我使用 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')

【问题讨论】:

  • 我认为 ReadLn() 读取了一个完整的行,所以我只需在您发送的字符串的末尾添加 \n 。你试过了吗?
  • 谢谢,就是这样。如果您需要功劳,请将其作为解决方案发布。

标签: delphi sockets indy


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多