C++ 関数はネットワーク プログラミングでデータ送信をどのように実装しますか?

王林
リリース: 2024-04-27 17:06:02
オリジナル
978 人が閲覧しました

C のネットワーク データ送信関数には、サーバー側でデータを送受信するために使用される、recv() および send() が含まれます。以下の手順は、recv() と send() を使用してエコー サーバーを作成するプロセスを示しています。 1. ソケットを作成します。 2. サーバー アドレス情報を設定します。 3. ソケットをサーバー アドレスにバインドします。 ; 5. 接続を受け入れ、データを受信し、ループでクライアントに送り返します。 6. 接続とソケットを閉じます。

C++ 函数在网络编程中如何实现数据传输?

#ネットワーク データ送信に C 関数を使用する

ネットワーク プログラミングでは、データの送信は重要な操作です。 C はこの目的のために強力な機能を提供し、開発者がデータ転送を簡単かつ効率的に処理できるようにします。

サーバー側: データの受信と送信

サーバー側では、

recv() 関数を使用してクライアントからデータを受信できます。 。この関数のプロトタイプは次のとおりです:

int recv(int sockfd, void *buf, size_t len, int flags);
ログイン後にコピー

その中に:

  • sockfd: データを読み取るためのソケット記述子。
  • buf: 受信したデータを格納するバッファ。
  • len: 受信する最大バイト数。
  • flags: 受信動作を制御するフラグ。
データをクライアントに送信するには、

send() 関数を使用できます。

int send(int sockfd, const void *buf, size_t len, int flags);
ログイン後にコピー

そのパラメータは

recv() と似ています。 ### 関数 。

実践的なケース: 単純なエコー サーバーを作成する

次は、C:

#include <iostream>
#include <stdlib.h>
#include <sys/socket.h> // 套接字支持
#include <netinet/in.h> // 互联网地址结构支持

using namespace std;

int main() {
  // 创建套接字
  int server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
  if (server_sockfd < 0) {
    cerr << "错误:无法创建套接字!" << endl;
    return -1;
  }

  // 设置服务器地址信息
  sockaddr_in server_addr;
  server_addr.sin_family = AF_INET;
  server_addr.sin_port = htons(8080); // 将端口号转换为网络字节序
  server_addr.sin_addr.s_addr = INADDR_ANY; // 接受任何 IP 地址的连接

  // 绑定套接字到服务器地址
  if (bind(server_sockfd, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0) {
    cerr << "错误:绑定套接字失败!" << endl;
    return -1;
  }

  // 监听连接
  if (listen(server_sockfd, 5) < 0) {
    cerr << "错误:监听连接失败!" << endl;
    return -1;
  }

  while (true) {
    // 接受连接
    sockaddr_in client_addr;
    socklen_t client_addr_len = sizeof(client_addr);
    int client_sockfd = accept(server_sockfd, (struct sockaddr *) &client_addr, &client_addr_len);
    if (client_sockfd < 0) {
      cerr << "错误:接受连接失败!" << endl;
      continue;
    }

    // 接收和发送数据
    char buffer[1024]; // 用于存储数据的缓冲区
    int n;
    while ((n = recv(client_sockfd, buffer, sizeof(buffer), 0)) > 0) {
      // 发送回客户端
      int m = send(client_sockfd, buffer, n, 0);
      if (m < 0) {
        cerr << "错误:发送数据失败!" << endl;
        break;
      }
    }

    // 关闭连接
    close(client_sockfd);
  }

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

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

を使用してエコー サーバーを実装するためのサンプル コードです。

recv()

関数と send() 関数は、クライアントからデータを受信し、それをそのままクライアントに送り返すために使用されます。

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

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