私は IT の仕事をしており、ネットワーク セキュリティ管理について学んでいます。TCP/IP ソケット API を使用して、基本的なクライアント/サーバー アプリケーションを設計および実装する方法を学びたいと考えています。オブジェクト指向プログラミング言語を知る必要がありますか? それとも、TCP/IP プログラミング用のさまざまなメソッド/関数が既に用意されていますか?
1 に答える
ファイル IO と同様に、ストリーム IO についてしっかりと理解しておく必要があります。セットアップが完了すると、多くのユースケースで実質的にストリーム IO とまったく同じになります。これには、ストリーム操作の概念と、システム コールの適切なエラー処理が含まれます。
テキストまたはバイナリ プロトコルを理解する必要があります。特に、読み取りを停止するタイミングを理解する必要があります。一部のプロトコルでは、ストリームはイベントからイベントへと開いたままになりますが、データ パケットの最後を超えて読み取ると、ソケットのもう一方の端から何も送信されず、コードがブロックされます。あなたがしたい。いつ読むのをやめるべきかを知ることができることは非常に重要です。一部のプロトコルはマーカーを使用し、他のプロトコルは以前に送信された長さを使用します。これは、初心者のネットワーク プログラマにとって一般的な問題の原因です。
バイナリ プロトコルの場合、数値、特に整数のバイト配置を理解する必要があります。具体的には、ビッグエンディアン対リトルエンディアン対「ネットワーク順序」です。また、バイトからより大きな構造を構築する方法を理解する必要があります (特に、バイトからの整数)。これを不適切に行うと、数値がかなり間違ったものになります。
クライアントにとっては、これで十分です。ソケットを作成したら、結果のソケットに対してストリーム操作を実行し、情報のバイトとブロックを送受信します。完了したら、ソケットを閉じます。プロトコルで指定されていない限り、サーバーがソケットを閉じて完了したことを示すことに依存しないでください。終了時にリソースをクリーンアップしてください。
サーバーを作成して一度に複数のリクエストを処理する場合は、複数のリクエストを同時に処理するために、スレッド化、フォーク、または非同期 IO の知識が必要になります。その後、クライアント側とほぼ同じになりますが、リッスン ソケットの最初の作成は少し異なります。
確かに、ネットワーク プログラミングにはニュアンスと複雑さがありますが、基本的な接続では、これらの多くは無視できます。
スクリプト言語、Java、および .NET を使用すると、ネットワーク プログラミングが C よりもはるかに簡単になります。C は raw ソケットを公開し、詳細でありながら日常的な操作をすべてユーザーに任せます。スクリプト言語から始めると、はるかに多くの成功を収めることができます。ネットワーク プログラミングを容易にする C や C++ ライブラリについて話すことはできません。それらが存在すると確信していますが、引用することはできません。
また、最初のフラストレーション、万歳の感覚に対処するための忍耐も必要です。それが最終的に機能するとき、そして最後に座って「まあ、それほど悪くはなかった、これはかなりきれいだ」と言って、次のことを静かに振り返る快適な椅子.
最後に、私がいつも提案しているように、サンプル コードをカット アンド ペーストしないでください。見つけたものは何でも入力し、入力しながら各行を理解するようにしてください。何かをダウンロードして実行するだけの場合よりも、これがどのように機能するかをよりよく理解できます。