ホームページ >バックエンド開発 >C++ >C++ をネットワーク プログラミングに使用するにはどうすればよいですか?

C++ をネットワーク プログラミングに使用するにはどうすればよいですか?

王林
王林オリジナル
2023-11-03 11:10:461143ブラウズ

C++ をネットワーク プログラミングに使用するにはどうすればよいですか?

インターネットの発展に伴い、ネットワーク プログラミングはコンピューター サイエンスの重要な部分を占めるようになりました。 C は強力なプログラミング言語として、ネットワーク プログラミングに対する多くのサポートも提供します。この記事では、C言語を使ったネットワークプログラミングの方法を紹介します。

ネットワーク プログラミングの概要

ネットワーク プログラミングとは、コンピューター ネットワークを使用した通信のためのプログラムを作成するプロセスを指します。ネットワーク プログラミングでは、データ送信にネットワーク プロトコル (TCP/IP など) を使用する必要があります。ネットワーク プログラミングには、クライアントとサーバーという 2 つの主な役割があります。クライアントはリクエストを開始するプログラムを指し、サーバーはリクエストに応答してデータを提供するプログラムを指します。

C ネットワーク プログラミング

C は、ネットワーク プログラミングをサポートするいくつかのライブラリとツールを提供します。一般的に使用される C ネットワーク プログラミング ライブラリの一部を以下に示します。

  1. Boost.Asio: これは、TCP/IP、UDP、TCP/IP などの複数のネットワーク プロトコルをサポートする、非同期および同期プログラミング用のクロスプラットフォーム C ライブラリです。 SSL。
  2. Poco C: これは、HTTP、SMTP、POP3 などのプロトコルをサポートする、ネットワーク ベースのアプリケーションを開発するためのクロスプラットフォーム C クラス ライブラリです。
  3. ACE: これは、C 言語に基づいたオブジェクトレベルのネットワーク プログラミング ツールキットで、非同期 I/O、多重化および分散アプリケーションなどをサポートします。

この記事では、ネットワークプログラミング用のC標準ライブラリのソケットライブラリの使い方を中心に紹介します。

ネットワーク プログラミングに C ソケット ライブラリを使用する

C では、ソケット ライブラリはネットワーク プログラミングに使用される重要なライブラリの 1 つです。ソケット ライブラリは、リモート コンピュータ間で通信するための簡単でポータブルな方法を提供し、プログラマがネットワーク アプリケーションを迅速に作成できるようにします。

ソケット ライブラリを使用する前に、次のヘッダー ファイルをインクルードする必要があります:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <iostream>
#include <stdlib.h>

ソケットの作成

C ソケットを作成するには、socket() 関数を使用できます。

int sockfd = socket(AF_INET, SOCK_STREAM, 0);

ここで、AF_INET は IPv4 プロトコルの使用を示し、SOCK_STREAM は送信に TCP プロトコルの使用を示し、0 はデフォルト プロトコルの使用を示します。

サーバーへの接続

サーバーに接続したい場合は、connection コマンドを使用して接続できます。クライアントで使用する場合、socket() 関数を使用してソケットを作成した後、接続関数 connect() を使用してソケットをサーバーにバインドできます。コードは次のとおりです。

struct sockaddr_in serv_addr;
memset(&serv_addr, '0', sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(port);
if (inet_pton(AF_INET, ip, &serv_addr.sin_addr) <= 0)
{
    std::cerr << "Error: Address not supported" << std::endl;
    return -1;
}

if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
{
    std::cerr << "Error: Connection Failed" << std::endl;
    return -1;
}

ここでは、サーバーの IP アドレスとポート番号を指定する必要があります。 inet_pton() 関数は、標準のドット付き 10 進数の IP アドレスをネットワーク バイト オーダーに変換します。接続に失敗した場合は、-1 が返されます。

データの送受信

send() 関数と recv() 関数を使用してデータを送受信できます。データを送信するコードは次のとおりです。

int bytes_sent = send(sockfd, buffer, strlen(buffer), 0);

ここで、sockfd はソケット、buffer は送信するデータ、strlen(buffer) はデータの長さ、0 はフラグが設定されていないことを意味します。

以下はデータを受信するコードです:

char incoming_buffer[1024];
memset(incoming_buffer, '0', sizeof(incoming_buffer));
bytes_received = recv(sockfd, incoming_buffer, 1024, 0);
std::cout << "Received: " << incoming_buffer << std::endl;

ここで、incoming_buffer はサイズ 1024 の文字配列です。recv() 関数は接続されたソケットからデータを読み取り、それを変換します。 incoming_buffer 内。

接続を閉じる

データの送受信が終了したら、close() 関数を使用して接続を閉じる必要があります。コードは次のとおりです。

close(sockfd);

これにより、接続ソケットが閉じられ、関連リソースが解放されます。

概要

この記事では、C のソケット ライブラリをネットワーク プログラミングに使用する方法を紹介しました。基本的なネットワーク プログラミングには、ソケットの作成、サーバーへの接続、データの送受信、および接続の終了が含まれます。実際のネットワーク アプリケーション開発では、複数の接続の処理、ノンブロッキング ソケットの使用など、さらに多くの状況に対応する必要がある場合があります。ただし、ここで述べたことは初心者にとってすでに良い出発点となっていると考えられます。

以上がC++ をネットワーク プログラミングに使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。