2

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')
4

1 に答える 1

1

関数IdTCPClient1.IOHandler.ReadLn()がハングし、サーバーから「行末」 (#13#10または\r\n) を受信するまで待機します。最後にサーバー側の応答を追加します\r\n

于 2015-07-31T16:37:46.937 に答える