ホームページ > バックエンド開発 > C++ > C++ 関数は、ネットワーク プログラミングでクライアント ソケットをどのように確立して管理しますか?

C++ 関数は、ネットワーク プログラミングでクライアント ソケットをどのように確立して管理しますか?

WBOY
リリース: 2024-04-27 21:18:02
オリジナル
1229 人が閲覧しました

C でクライアント ソケットを確立および管理するには、次の手順に従う必要があります。socket() 関数を使用してソケットを作成します。 connect() 関数を使用して、ソケットをサーバーに接続します。 send() 関数と recv() 関数を使用して、サーバーとデータを交換します。

C++ 函数在网络编程中如何建立和管理客户端端套接字?

#C 関数はネットワーク プログラミングでクライアント ソケットを作成および管理します

クライアント ソケットを確立および管理することは、ネットワーク プログラミングにおける基本的なタスクです。 C には、この目的を達成するためのいくつかの関数が用意されています。

クライアント ソケットの確立

socket() 関数を使用してソケットを作成します:

#include <sys/socket.h>

int socket(int domain, int type, int protocol);
ログイン後にコピー

  • domain: プロトコル ファミリを指定します。通常は AF_INET (IPv4) または AF_INET6 (IPv6) です。
  • type: ソケットのタイプを指定します。クライアントは通常、SOCK_STREAM (TCP) または SOCK_DGRAM (UDP) を使用します。
  • protocol: 通常は 0 で、オペレーティング システムがデフォルトのプロトコルを選択できるようにします。

例:

int sockfd = socket(AF_INET, SOCK_STREAM, 0);
ログイン後にコピー

サーバーに接続します

connect()## を使用します# function クライアントソケットをサーバーに接続します: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:cpp;toolbar:false;'>#include &lt;sys/socket.h&gt; int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);</pre><div class="contentsignin">ログイン後にコピー</div></div>

    sockfd:
  • クライアントソケット記述子。
  • addr:
  • サーバー アドレス構造 (通常は sockaddr_in)。
  • addrlen:
  • アドレス構造のサイズ。
例:

struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(80);
inet_pton(AF_INET, "192.168.1.100", &servaddr.sin_addr);

int rc = connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
ログイン後にコピー

データの送受信

使用

send()

および recv() 関数はサーバーとデータを交換します: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:cpp;toolbar:false;'>#include &lt;sys/socket.h&gt; ssize_t send(int sockfd, const void *buf, size_t len, int flags); ssize_t recv(int sockfd, void *buf, size_t len, int flags);</pre><div class="contentsignin">ログイン後にコピー</div></div>

    sockfd:
  • クライアント ソケット記述子。
  • buf:
  • データバッファ。
  • len:
  • 送受信されるデータの長さ。
  • flags:
  • フラグ、通常は 0
例:

char buf[1024];
int n = recv(sockfd, buf, sizeof(buf), 0);
ログイン後にコピー

実践的なケース: クライアント ソケットの確立と管理

これは完全な C 言語です。上記の関数を使用してクライアント ソケットを確立および管理する方法を示すプログラム:

#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>

int main() {
    // 创建套接字
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        std::cout << "Error creating socket" << std::endl;
        return -1;
    }

    // 连接到服务器
    struct sockaddr_in servaddr;
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(80);
    inet_pton(AF_INET, "192.168.1.100", &servaddr.sin_addr);
    int rc = connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
    if (rc < 0) {
        std::cout << "Error connecting to server" << std::endl;
        return -1;
    }

    // 发送数据
    const char *msg = "Hello, server!";
    int n = send(sockfd, msg, strlen(msg), 0);
    if (n < 0) {
        std::cout << "Error sending data" << std::endl;
        return -1;
    }

    // 接收数据
    char buf[1024];
    n = recv(sockfd, buf, sizeof(buf), 0);
    if (n < 0) {
        std::cout << "Error receiving data" << std::endl;
        return -1;
    }

    std::cout << "Received data: " << buf << std::endl;

    // 关闭套接字
    close(sockfd);

    return 0;
}
ログイン後にコピー

以上がC++ 関数は、ネットワーク プログラミングでクライアント ソケットをどのように確立して管理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート