目次
?基本的なTCPサーバー
?基本的なTCPクライアント
?§コンパイルして実行する方法
✅キーポイント
⚠⚠きメモ
ホームページ バックエンド開発 C++ Cソケットプログラミングの例

Cソケットプログラミングの例

Aug 06, 2025 am 10:51 AM

この例は、Linux/UNIXシステム上のCを使用して実装された基本的なTCPクライアントサーバー通信を示しています。 1.サーバーはソケットを作成し、ポート8080にバインドします。 2。接続リクエストの聴取を開始します。 3.クライアント接続を受け入れます。 4.クライアントから送信されたメッセージを読む。 5。クライアントに応答を送信します。 6.接続を閉じます。クライアントが実行されます。1。ソケットを作成します。 2。サーバーIPとポートに接続します。 3.メッセージを送信します。 4。サーバーの応答を受信します。 5.接続を閉じます。このプログラムは、エラー処理を含む標準システム呼び出しを使用しており、ローカルループバックテストに適しており、紹介ネットワークプログラミングの基本的な実装です。

Cソケットプログラミングの例

基本的なTCPクライアントサーバーセットアップを実証する実用的でシンプルなCソケットプログラミングの例を次に示します。この例はsys/socket.hおよび関連するヘッダーを使用して、Linux/unixシステム(ubuntuなど)で動作します。 WindowsユーザーはWinSockを調整する必要がありますが、標準のUNIXのようなアプローチに焦点を当てます。

Cソケットプログラミングの例

?基本的なTCPサーバー

このサーバーは、ポート8080に耳を傾け、1つの接続を受け入れ、メッセージを受信し、応答を送信します。

 // server.cpp
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>

int main(){
    int server_fd、new_socket;
    struct sockaddr_inアドレス;
    int addrlen = sizeof(address);
    charバッファー[1024] = {0};
    const char *hello = "hello from server";

    // 1。ソケットファイル記述子を作成します
    if((server_fd = socket(af_inet、sock_stream、0))== 0){
        Perror( "ソケット障害");
        exit(exit_failure);
    }

    //2。アドレスとポートを定義します
    address.sin_family = af_inet;
    address.sin_addr.s_addr = inaddr_any;
    address.sin_port = htons(8080);

    //3。ソケットをポートにバインドします
    if(bind(server_fd、(struct sockaddr *)&address、sizeof(address))<0){
        Perror( "Bind Failed");
        close(server_fd);
        exit(exit_failure);
    }

    // 4。着信接続を聞いてください
    if(聴取(server_fd、3)<0){
        Perror( "Listen");
        close(server_fd);
        exit(exit_failure);
    }

    std :: cout << "ポート8080で聞くサーバー... \ n";

    // 5。接続を受け入れます
    if((new_socket = accept(server_fd、(struct sockaddr *)」&address、(socklen_t *)&addrlen)<0){
        Perror( "Accept");
        close(server_fd);
        exit(exit_failure);
    }

    //6。クライアントからデータを読む
    read(new_socket、buffer、1024);
    std :: cout << "client:" << buffer << std :: endl;

    // 7。応答を送信します
    send(new_socket、hello、strlen(hello)、0);
    std :: cout << "応答送信\ n";

    // 8。クリーンアップ
    close(new_socket);
    close(server_fd);
    0を返します。
}

?基本的なTCPクライアント

このクライアントはサーバーに接続し、メッセージを送信し、応答を読み取ります。

Cソケットプログラミングの例
 // client.cpp
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

int main(){
    int sock = 0;
    struct sockaddr_in serv_addr;
    const char *message = "hello from client";
    charバッファー[1024] = {0};

    // 1。ソケットを作成します
    if((sock = socket(af_inet、sock_stream、0))<0){
        Perror( "ソケット作成エラー");
        return -1;
    }

    serv_addr.sin_family = af_inet;
    serv_addr.sin_port = htons(8080);

    // 2。IPアドレスを変換して接続します
    if(inet_pton(af_inet、 "127.0.0.1"、&serv_addr.sin_addr)<= 0){
        Perror( "無効なアドレス /アドレスがサポートされていない");
        閉じる(靴下);
        return -1;
    }

    if(connect(sock、(struct sockaddr *)&serv_addr、sizeof(serv_addr))<0){
        Perror( "接続失敗");
        閉じる(靴下);
        return -1;
    }

    // 3。サーバーにメッセージを送信します
    send(sock、message、strlen(message)、0);
    std :: cout << "server \ n"に送信されたメッセージ;

    // 4。応答を読みます
    読み取り(Sock、Buffer、1024);
    std :: cout << "サーバー応答:" << buffer << std :: endl;

    // 5。クリーンアップ
    閉じる(靴下);
    0を返します。
}

?§コンパイルして実行する方法

2つの端子ウィンドウを開きます。

 #サーバーをコンパイルします
g server.cpp -o server

#クライアントをコンパイルします
g client.cpp -oクライアント

ターミナル1:

Cソケットプログラミングの例
 。/サーバ

ターミナル2(サーバーが実行されていない後):

 。/クライアント

あなたは見るべきです:

  • サーバー:「クライアント:クライアントからこんにちは」、それから応答を送信します。
  • クライアント:「サーバーの応答:サーバーからこんにちは」

✅キーポイント

  • I/Oのブロックを使用します - シンプルですが、スケーラブルではありません。
  • IPv4のみ( AF_INET )、tcp( SOCK_STREAM )。
  • 明確さを学習するために、エラーチェックが含まれています。
  • 127.0.0.1を介してローカルに実行されます。

⚠⚠きメモ

  • 複数のクライアントの場合、 accept()後にサーバーでfork()を使用するか、 select() / poll()を使用します。
  • ソケット関数の返品値を常に確認してください。
  • ポート番号にはhtons()を使用して、endiannessを処理します。
  • Windowsでは、winsock( #include <winsock2.h></winsock2.h> )が必要になり、 ws2_32.libとリンクします。

これは、Cソケットプログラミングの最低でも完全な作業例です。これは、チャットサーバー、HTTPのようなサービス、またはプロセス間通信などのネットワークアプリの堅実な出発点です。

以上がCソケットプログラミングの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

cでraiiを説明します cでraiiを説明します Jul 22, 2025 am 03:27 AM

RAIIは、Cのリソース管理に使用される重要な技術です。そのコアは、オブジェクトのライフサイクルを通じてリソースを自動的に管理することにあります。その中心的なアイデアは、リソースが建設時に取得され、破壊時にリリースされるため、手動のリリースによって引き起こされる漏れの問題を回避することです。たとえば、RAIIがない場合、ファイル操作には手動でfcloseを呼び出す必要があります。中央にエラーがある場合、または事前に戻る場合、ファイルを閉じるのを忘れる場合があります。また、FileHandleクラスがファイル操作をカプセル化するなどのRAIIを使用した後、リソースをリリースするためにスコープを離れた後、デストラクタは自動的に呼び出されます。 1.Raiiは、ロック管理(STD :: LOCK_GUARDなど)、2。MemoryManagement(STD :: ASICE_PTRなど)、3。Databaseおよびネットワーク接続管理などで使用されます。

cでstd ::オプションを使用します cでstd ::オプションを使用します Jul 21, 2025 am 01:52 AM

std :: optionalに値があるかどうかを判断するには、has_value()メソッドを使用するか、ifステートメントで直接判断することができます。空になる可能性のある結果を返すときは、nullポインターや例外を避けるためにSTD ::オプションを使用することをお勧めします。それは乱用されるべきではなく、いくつかのシナリオではブールの戻り値または独立したブール変数がより適しています。初期化方法は多様ですが、Reset()を使用して値をクリアし、ライフサイクルと建設行動に注意を払うことに注意を払う必要があります。

cベクトル最初の要素を取得します cベクトル最初の要素を取得します Jul 25, 2025 am 12:35 AM

std :: vectorの最初の要素を取得するための4つの一般的な方法があります。1。front()メソッドを使用して、ベクトルが空でないことを確認し、明確なセマンティクスを持ち、毎日の使用に推奨されます。 2。subscript [0]を使用すると、パフォーマンスはfront()に匹敵するが、わずかに弱いセマンティクスに匹敵するものであるため、空に判断する必要があります。 3。汎用プログラミングとSTLアルゴリズムに適した *begin()を使用します。 4.手動でnullの判断なしに(0)で使用しますが、パフォーマンスが低く、デバッグや例外処理に適した境界を越えたときの例外をスローします。ベストプラクティスは、最初にempty()を呼び出して空であるかどうかを確認し、次にフロント()メソッドを使用して最初の要素を取得して未定義の動作を避けます。

C標準ライブラリが説明しました C標準ライブラリが説明しました Jul 25, 2025 am 02:11 AM

C標準ライブラリは、効率的なツールを提供することにより、開発者がコードの品質を向上させるのに役立ちます。 1. STLコンテナは、継続的なストレージに適したベクトル、頻繁な挿入と削除に適したリスト、UNORDERED_MAPなど、シーンに従って選択する必要があります。 2。ソート、検索、変換などの標準ライブラリアルゴリズムは、効率を改善し、エラーを減らすことができます。 3.インテリジェントなポインターunique_ptrとshared_ptrは、漏れを避けるためにメモリを効果的に管理します。 4.オプション、バリアント、機能などのその他のツールは、コードセキュリティと表現力を強化します。これらのコア関数をマスターすると、開発効率とコードの品質を大幅に最適化できます。

C関数の例 C関数の例 Jul 27, 2025 am 01:21 AM

関数は、コードの再利用とモジュール化を実現するために使用されるCのコードを整理する基本単位です。 1。関数は、intadd(inta、intb)などの宣言と定義を通じて作成され、2つの数値の合計を返します。 2。関数を呼び出すときにパラメーターを渡し、機能が実行された後に対応する型の結果を返します。 3. return値のない関数は、グリーティング情報を出力するためのvoidgreet(stringName)など、voidを返すタイプとして使用します。 4.関数を使用すると、コードの読みやすさを改善し、重複を避け、Cプログラミングの基本概念であるメンテナンスを促進できます。

Cビット操作の例 Cビット操作の例 Jul 25, 2025 am 02:33 AM

ビット操作は、整数の基礎操作を効率的に実装できます。1。i番目のビットが1であるかどうかを確認します。

c反復中のベクトルから消去します c反復中のベクトルから消去します Aug 05, 2025 am 09:16 AM

要素を削除するときに反復している場合は、故障したイテレーターの使用を避ける必要があります。正しい方法は、it = vec.erase(it)を使用し、earseによって返された有効なイテレーターを使用してトラバースを続けることです。 batchバッチ削除に推奨される「消去除去」イディオム:vec.erase(std :: remove_if(vec.begin()、vec.end()、条件)、vec.end())、安全で効率的です。 reverse逆イテレータを使用して背面から前面に削除できますが、ロジックは明確ですが、条件方向に注意を払う必要があります。結論:消去リターン値でイテレーターを常に更新し、障害のあるイテレーターの操作を禁止します。そうしないと、未定義の動作が生じます。

c文字列の例へのchar配列 c文字列の例へのchar配列 Aug 02, 2025 am 05:52 AM

答えは次のとおりです。STD:: STRINGコンストラクターを使用して、CHARアレイをSTD :: Stringに変換します。配列に中間体「\ 0」が含まれている場合、長さを指定する必要があります。 1。「\ 0」で終わるcスタイルの文字列の場合、std :: stringsstr(chararray)を使用します。コンバージョンを完了するには。 2.文字配列に中央の「\ 0」が含まれているが、最初のn文字を変換する必要がある場合は、std :: stringstr(chararray、length)を使用します。長さを明確に指定します。 3.固定サイズの配列を処理するときは、「\ 0」で終了してから変換してください。 4。Str.Assign(Chararray、Chararray strlを使用します

See all articles