2013-10-11 161 views
2

我与使用TClientSocket的Python服务器进行套接字通信。在意识到我无法使用TClientSocket的客户端之后,我决定使用INDY。我使用Delphi Indy为客户端和服务器制作了一个小测试应用程序。这工作。Indy TCP客户端ReadLn函数挂起

但是它现在不适用于Python。 Python接收连接并且消息很好,但是当它响应时,我的Delphi没有任何东西。我对fIdTCPClient1.IOHandler.ReadLn()的调用只是永远在那里。

从非INDY服务器向INDY发送消息有什么特别之处吗?上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 

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发送/收到

data = conn.recv(4096).strip() 
print data 
conn.send('I am here') 
+4

我认为ReadLn()读取一个完整的行,所以我只是在您发送的字符串末尾添加\ n。你尝试过吗? – mguijarr

+2

谢谢,就是这样。如果您想要信用,请将其作为解决方案发布。 – runfastman

回答

-1

功能IdTCPClient1.IOHandler.ReadLn()挂起并等待,直到接收到 “行结束”(#13#10\r\n)从服务器。结束时在服务器端添加\r\n响应。