C ++-1つのサーバースレッドと1つのクライアントスレッドを同じプログラムで実行する

ピプジャ

ブーストの昼間のサーバー/クライアントの例を以下のように2つのスレッドで実行するように変更しようとしましたが、機能しませんでした。

#include <ctime>
#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/thread.hpp>

using boost::asio::ip::tcp;

std::string make_daytime_string()
{
  using namespace std; // For time_t, time and ctime;
  time_t now = time(0);
  return ctime(&now);
}

void ServerThread()
{
    boost::asio::io_service io_service;
    tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 13));

    for (;;)
    {
        std::cout << "why?";
        tcp::socket socket(io_service);
        acceptor.accept(socket);
        std::string message = make_daytime_string();
        boost::system::error_code ignored_error;
        boost::asio::write(socket, boost::asio::buffer(message),
        boost::asio::transfer_all(), ignored_error);
    }

}

void ClientThread()
{
    try
  {
    boost::asio::io_service io_service;

    std::string hostString;

    std::cout << "Please enter the host: ";
    std::cin >> hostString;

    tcp::resolver resolver(io_service);
    tcp::resolver::query query(hostString, "daytime");
    tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);

    tcp::socket socket(io_service);
    boost::asio::connect(socket, endpoint_iterator);
  }
  catch (std::exception& e)
  {
    std::cerr << e.what() << std::endl;
  }
}

int main()
{
  boost::thread s(&ServerThread);
  boost::thread c(&ClientThread);

  c.join();
  s.join();

  return 0;
}

2つのスレッドはすぐに次々に実行され、正しく処理されません。私はフォークの線に沿って何かをする必要があると思いますか?コードの何が問題なのか教えてください、ありがとう。

jhoffman0x

クライアントでは、データを受信するコードのセクションを省略しました。接続後にこれを入れてください:

for (;;)
{
    boost::array<char, 128> buf;
    boost::system::error_code error;

    size_t len = socket.read_some(boost::asio::buffer(buf), error);
    if (error == boost::asio::error::eof)
        break; // Connection closed cleanly by peer.
    else if (error)
        throw boost::system::system_error(error);
    std::cout.write(buf.data(), len);
}

また、boost /array.hppを含める必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

1つのプログラムで10スレッドまたは1スレッドプログラムが10回実行されました(C ++)?

分類Dev

同じCプログラム内の2つのスレッド間でUDPメッセージを送信する(Linux)

分類Dev

C ++のマルチスレッドプログラムは、シリアルプログラムと同じパフォーマンスを示します

分類Dev

別のネットワークのサーバー/クライアントソケットをアドレス指定することは可能ですか?(C ++)

分類Dev

TCP ソケット c Linux を使用した 1 つのプログラムのクライアントとサーバー

分類Dev

Cでのクライアントとサーバーのソケット接続の実行-スレッドあり

分類Dev

C ++ 17がテンプレートで同じ目的のために2つのキーワード(クラスとタイプ名)を持っている理由

分類Dev

マルチスレッドCプログラムでのアサート時のgdbブレークポイント

分類Dev

同じ派生クラスインスタンスへのポインタを仮想ベースポインタにアップキャストすると、常に同じアドレスが返されますか?C ++

分類Dev

C#でプロセッサ/ IOの重いマルチスレッドタスクの同時実行を制限するためのトークンシステムを実装するにはどうすればよいですか?

分類Dev

C ++でのスレッドプール-プログラムを終了する方法

分類Dev

cでミューテックスを使用してマルチスレッド化し、一度に1つのスレッドを実行する

分類Dev

Azure Active Directoryグラフクライアントを使用して、Azure B2Cで同じユーザー名\メールアドレスを持つすべてのユーザーを検索するにはどうすればよいですか?

分類Dev

各ビット1の位置をバイナリシーケンスで格納するC ++プログラム

分類Dev

ポリモーフィズムによるC ++テンプレートメソッドのオーバーロードとクラスアクセス

分類Dev

C ++プログラムをコンパイルしてバックグラウンドで実行し、タスクバーに表示する

分類Dev

プログレスバーをリストボックスアイテムの削除と同期する方法c#

分類Dev

2つのスレッドと1つの出力バッファーを同期するC#タイミングsempahore

分類Dev

C#すべてのオブジェクトに同じイベントハンドラーをサブスクライブすることはスレッドセーフですか

分類Dev

リストを1つずつ処理するC#バックグラウンドワーカー

分類Dev

C#の同じソリューションで別のプロジェクトバッドからvbスクリプトを実行する

分類Dev

Cプログラムをコンパイルすると、コードブロックで「検索パスに実行可能なコンパイラが見つかりません(GNU GCCコンパイラ)」が表示されます。

分類Dev

Cのソケットプログラミングでサーバー自体のIPアドレスが必要なのはなぜですか

分類Dev

NICにIPアドレスを追加するクロスプラットフォームの方法(c ++を使用)

分類Dev

c ++ 11 std :: bindを使用して、クラス内の同じ名前のメンバー関数の1つをバインドする方法

分類Dev

サーバーの作成後にC ++ httplibライブラリがメインスレッドをブロックするのはなぜですか?

分類Dev

インターネットの速度が遅い場合と速い場合があるため、ログインするまでプログレスバーを実行します。(C#、Windowsフォームアプリケーション)

分類Dev

Objective-CのinitXXXメソッドを同じタイプの引数を持つXamarin.iOSのコンストラクターにバインドするにはどうすればよいですか?

分類Dev

このTCPサーバー/クライアントをcでマルチスレッド化するにはどうすればよいですか?

Related 関連記事

  1. 1

    1つのプログラムで10スレッドまたは1スレッドプログラムが10回実行されました(C ++)?

  2. 2

    同じCプログラム内の2つのスレッド間でUDPメッセージを送信する(Linux)

  3. 3

    C ++のマルチスレッドプログラムは、シリアルプログラムと同じパフォーマンスを示します

  4. 4

    別のネットワークのサーバー/クライアントソケットをアドレス指定することは可能ですか?(C ++)

  5. 5

    TCP ソケット c Linux を使用した 1 つのプログラムのクライアントとサーバー

  6. 6

    Cでのクライアントとサーバーのソケット接続の実行-スレッドあり

  7. 7

    C ++ 17がテンプレートで同じ目的のために2つのキーワード(クラスとタイプ名)を持っている理由

  8. 8

    マルチスレッドCプログラムでのアサート時のgdbブレークポイント

  9. 9

    同じ派生クラスインスタンスへのポインタを仮想ベースポインタにアップキャストすると、常に同じアドレスが返されますか?C ++

  10. 10

    C#でプロセッサ/ IOの重いマルチスレッドタスクの同時実行を制限するためのトークンシステムを実装するにはどうすればよいですか?

  11. 11

    C ++でのスレッドプール-プログラムを終了する方法

  12. 12

    cでミューテックスを使用してマルチスレッド化し、一度に1つのスレッドを実行する

  13. 13

    Azure Active Directoryグラフクライアントを使用して、Azure B2Cで同じユーザー名\メールアドレスを持つすべてのユーザーを検索するにはどうすればよいですか?

  14. 14

    各ビット1の位置をバイナリシーケンスで格納するC ++プログラム

  15. 15

    ポリモーフィズムによるC ++テンプレートメソッドのオーバーロードとクラスアクセス

  16. 16

    C ++プログラムをコンパイルしてバックグラウンドで実行し、タスクバーに表示する

  17. 17

    プログレスバーをリストボックスアイテムの削除と同期する方法c#

  18. 18

    2つのスレッドと1つの出力バッファーを同期するC#タイミングsempahore

  19. 19

    C#すべてのオブジェクトに同じイベントハンドラーをサブスクライブすることはスレッドセーフですか

  20. 20

    リストを1つずつ処理するC#バックグラウンドワーカー

  21. 21

    C#の同じソリューションで別のプロジェクトバッドからvbスクリプトを実行する

  22. 22

    Cプログラムをコンパイルすると、コードブロックで「検索パスに実行可能なコンパイラが見つかりません(GNU GCCコンパイラ)」が表示されます。

  23. 23

    Cのソケットプログラミングでサーバー自体のIPアドレスが必要なのはなぜですか

  24. 24

    NICにIPアドレスを追加するクロスプラットフォームの方法(c ++を使用)

  25. 25

    c ++ 11 std :: bindを使用して、クラス内の同じ名前のメンバー関数の1つをバインドする方法

  26. 26

    サーバーの作成後にC ++ httplibライブラリがメインスレッドをブロックするのはなぜですか?

  27. 27

    インターネットの速度が遅い場合と速い場合があるため、ログインするまでプログレスバーを実行します。(C#、Windowsフォームアプリケーション)

  28. 28

    Objective-CのinitXXXメソッドを同じタイプの引数を持つXamarin.iOSのコンストラクターにバインドするにはどうすればよいですか?

  29. 29

    このTCPサーバー/クライアントをcでマルチスレッド化するにはどうすればよいですか?

ホットタグ

アーカイブ