0

クライアントは Borland C++ (C++Builder) ではなく Visual C++ で作成する必要があるため、現在、クライアントを Chilkat ライブラリで使用しようとしています。接続は機能しますが、クライアントからサーバーに文字列を送信しようとするとすぐに、IdTCPServerExecute関数にヒットしません。サーバーが使用しているライブラリとは別のライブラリをクライアントに使用することは可能ですか? もしそうなら、どのように?

編集:クライアントがサーバーに文字列を正常に送信することができました。私は今、次のようにクライアントメッセージを処理します:

UnicodeString Message = AContext->Connection->Socket->AllData();

それ以外の:

UnicodeString Message = AContext->Connection->Socket->ReadLn();

サーバーから応答文字列を送信する同様のオプションはありますか?

        if (IdHTTP->Get
            ("http://*/index.php?option=com_bookpro&controller=customer&task=bpajaxlogin&username=" +
            slTokens->Strings[1] + "&password=" + slTokens->Strings[2] +
            "&product_id=" + Class) == "true") {
            AddLog("1");
            char* Response = "Test";
            AContext->Connection->Socket->Write(Response);
            AddLog("2");
        }
        else {
            AContext->Connection->Socket->WriteLn
                ("Authentication failed");

        }

また、 になるだけでAddLog("1");表示されませんAddLog("2");

クライアント コード (テスト atm に Winsock を使用):

recv(ConnectSocket, recvbuf, recvbuflen, 0);
printf("Bytes received: %d, %s\n", sizeof(recvbuf), recvbuf);
4

1 に答える 1

0

クライアントは Borland C++ (C++Builder) ではなく VCL C++ で作成する必要があるため、現在、クライアントを Chilkat ライブラリで使用しようとしています。

「Borland C++」と比較して「VCL C++」とは何ですか? C++Builder コンパイラではなく、Borland のコマンドライン コンパイラのことを指していますか? それとも、C++Builder の Borland の VCL フレームワークとは関係のない、まったく別のサード パーティの VCL フレームワークについて言及していますか? 質問を明確にしてください。

接続は機能しますが、クライアントからサーバーに文字列を送信しようとするとすぐに、IdTCPServerExecute 関数にヒットしません。

これは、実際のサーバー コードを見ずに説明するのは困難です。

TIdTCPServer接続されたクライアントごとに新しいスレッドを作成します。このTIdTCPServer::OnExecuteイベントは、実際のネットワーク アクティビティには関連付けられていません。各スレッドの存続期間中、無限ループでトリガーされるだけです。OnExecuteイベントがまったくトリガーされない唯一の方法は、次のいずれかの場合です。

  1. TIdTCPServer::OnConnectスレッドセーフではないことを行うなど、イベントでスレッドをデッドロックしています。または、例外がスローされる原因となる何かを実行していて、それをキャッチしていません。キャッチされない例外は、スレッドを終了します。

  2. TIdTCPServer::OnConnectイベント ハンドラーがまだ実行されている間、またはイベント ハンドラーが終了してからTIdTCPServer::OnExecuteイベント ハンドラーが初めて呼び出されるまでの間にクライアントが切断された場合。

サーバーが使用しているライブラリとは別のライブラリをクライアントに使用することは可能ですか?

もちろん可能です。TCP は標準化されたトランスポート プロトコルです。異なる TCP 実装が標準に準拠している限り、それらは問題なく相互に通信できます。これは、複数のプラットフォーム間で安定した通信を行うための基本であり、インターネットはこれに依存しています。

于 2015-10-10T04:12:16.460 に答える