読者です 読者をやめる 読者になる 読者になる

つけじょにーのすぱげていコード

主に、競技プログラミング、セキュリティのお勉強の際に書いたすぱげていコードを書き込みます

パイプのやり取り

ネットワーク

C++で、パイプを用いて擬似クライアント-サーバー間通信をしてみました
今後、ネットワーク関連の記事を増やしていこうと考えています。

#include <sys/types.h>
#include <unistd.h>
#include <bits/stdc++.h>
using namespace std;

void exec() {
    pid_t pid; //プロセスID
    string buf = ""; //バッファ
    char result[256];
    int pp[2], qq[2]; //パイプ2つ
    
    pipe(pp); pipe(qq); //パイプとして設定
    
    pid = fork(); //子プロセスをフォーク
    
    if(pid == 0) { //client
        close(pp[0]); close(qq[1]);
        //buf = "Request ";
        //リクエスト送信
        printf("クライアントからのリクエストメッセージ: "); string tmp; getline(cin, tmp); buf += tmp;
        write(pp[1], buf.c_str(), buf.length());
        //レスポンス受信
        read(qq[0], result, sizeof(result));
        printf("Client reseived message: %s\n\n", result);
        
        close(pp[1]); close(qq[0]);
    } else { //server
        close(pp[1]); close(qq[0]);
        //リクエスト受信
        read(pp[0], result, sizeof(result));
        printf("Server reseived message: %s\n\n", result);
        
        //buf = "Response ";
        //レスポンス送信
        printf("サーバーからのレスポンスメッセージ: "); string tmp; getline(cin, tmp); buf += tmp;
        write(qq[1], buf.c_str(), buf.length());
        close(pp[0]); close(qq[1]);
    }
}

int main(void) {
    exec();
    
    return(0);
}