5

Eclipse、Emacs、Visual Studio、メモ帳の生活を送った後、Embarcadero RADStudio2010に慣れ始めたばかりです:)

TClientSocketとTServerSocketを多用していることがわかった非常に大きなC++アプリケーション(500.000〜1.000.000行)に飛び込んでいます。IDEは、TClientSocketが見つからなかったことについて最初に不満を述べましたが、それでもコンパイルできたので、頭をかきました。その後、デフォルトではインストールされておらず、以前から非推奨としてマークされていることがわかりました。

私はその主題について読み込もうとしましたが、多くの情報を見つけられませんでした。私の質問は

  • TClientSocketとTServerSocketが非推奨になるのはなぜですか?
  • WinSockおよびBSDソケットとの機能の違いは何ですか?
  • 代わりに何を使用するのが最善であり、アプリケーション全体を調べて、TClientSocketとTServerSocketが使用されているすべての場所を変更する必要のない迅速な交換はありますか?変わったのは主に内部の仕組みだと思いますか?
4

2 に答える 2

3

サポートされなくなったため、非推奨になりました。これらはWinsockソケットのまとめであるため、全体的な内部メカニズムは同じです-'リスナーの作成、リッスン、受け入れ、クライアントハンドラスレッドの作成、ServerClientSocketの受け渡し、クライアントスレッドによるストリームの読み取りと書き込み'。

コンポーネントをインポートするだけでもかまいません。サポートする大規模なレガシーアプリがある場合は、これが機能する場合の確実な方法です。

次に、別の方法があります:((IndyまたはSynapseコンポーネントを使用して、同じメンバーで'TClientSocket'クラスとTServerSocket'クラスを構築し、レガシーアプリが大幅な変更なしで動作するようにします。

于 2011-05-27T08:21:03.080 に答える
0

これらは非推奨になり、Indyソケットが採用されました。

ただし、Indyソケットはブロッキングのみです。プログラムがブロッキングソケットを使用している場合、これは問題ありませんが、非ブロッキングソケットを使用している場合、私が知る限り、2つのオプションしかありません。

  • スレッドとブロッキングIndyソケットを使用する
  • TClientSocketとTServerSocketを使用する

コンポーネントがありTTcpServerTTcpClientブロッキングと非ブロッキングを切り替えることができます。ただし、非ブロッキングモードで操作すると、機能せず(基本的な操作はWSAEWOULDBLOCKで失敗します)、回避策はありません。

dclsocketsNNN.bplこれを読んでいる他の人が気付いていない可能性があることに注意してください。最新バージョン(私が書いているように)でも、設計時パッケージのリストに追加することで、IDEにインポートできます。それらはそこにあり、デフォルトではアクティブではありません。

個人的には、本番環境ではまだ非ブロッキングモードでTClientSocketを使用していますが、問題なく動作します(いくつかのバグを修正した後、完全なソースが提供されているため可能です!)

于 2014-05-15T12:16:36.667 に答える