0

Linux OS で Inetd/xinetd と連携するサーバー/クライアント プログラムを作成するために、Qt を使用しようとしています。

このテキストでサービス構成ファイルを /etc/xinetd.d/testServ に追加しました

service testServ
{
  socket_type = stream
  protocol = tcp
  wait = no
  user = root
 server = /usr/sbin/testServer
 }

次に、この行を /etc/services に追加しました

 testServ   5050/tcp    # the service uses the port nr 5050 and tcp protocol

指定されたポートを使用してサーバーに接続する特別なクライアント プログラムを作成しましたが、これは問題なく動作します。

問題はサーバー プログラムにあります。サーバープログラムのメイン関数でこのコードを書きました

Int main(int argc, char *argv[]) {
  qDebug()<<"starting the daemon version of server client app";
  QApplication app(argc, argv);
  setvbuf(stdout, NULL, _IONBF, 0);
  setvbuf(stdin,  NULL, _IONBF, 0);
  QFile fstdin;
  QFile fstdout;
  fstdout.open(stdout, QFile::WriteOnly|QFile::Unbuffered);
  fstdin.open(stdin, QFile::ReadOnly);
  CleintProcess clientproc (NULL, &slog, argc, argv, &fstdin, &fstdout);
  app.exec();
  return 0;
}

サーバー プログラムの問題は、メイン関数の 2 行目にあり、この行以降はプログラムが続行されません。この行の後に何かを印刷すると画面に表示されませんが、この行の前に何かを印刷すると印刷メッセージが表示されます。Inetd/xinetd が動作しない理由がわかりません QApplication app(argc, argv);

この行と他の行(app.exe)を削除すると、プログラムは直接終了しました。

オブジェクトclientproc(....)で何度も使用しているため、QApplicationが必要です。

この問題を解決して、qt を Linux の inetd/xinetd で動作させるのを手伝ってくれませんか。

4

0 に答える 0