1

C で簡単なチャットを作成する必要があります。1 つのプログラムは、クライアントが接続するサーバーであり、クライアントが送信するメッセージを管理します。クライアントは別のプログラムであり、ここで問題が発生しました。他のクライアントから (サーバー経由で) メッセージを受信し、コンソール出力に出力できるようにしたいと考えています。しかし同時に、私は自分のメッセージを書き、それをサーバー (そして他のクライアント) に送信できるようにしたいと考えています。
問題は、メッセージを書いている間にサーバーからメッセージを受け取ると、入力全体が台無しになることです。メッセージ出力エリアとメッセージ入力エリアをどうにか分けたい。それを行う良い方法はありますか?これは、クライアント プログラムの私のフォークです (まだドラフトです)。

int pid = fork();
if(pid==0){
    do{
        scanf("%s", msg);
        printf("sending the message to the server\n");
    } while(strcmp(msg, "exit"));
    kill(getppid(), SIGKILL);
    printf("kill the child\n");
} else {
    while(1){
        printf("receiving a new message\n");
        sleep(1);
    }
}

編集:
わかりました、単純な ncurses アプリケーションを作成しましたが、もう 1 つ問題があります。2 つのプロセスがある場合 (fork() の後)、ncurses で同じウィンドウに書き込むにはどうすればよいですか? それらには別々のウィンドウがあるようで、入力を提供するか、サーバーから出力を読み取ることができますが、両方を1つの画面に表示することはできません。何か提案はありますか?クライアントとサーバーの間だけで、それらの間で IPC を作成したくありませんでした。

EDIT2:
締め切りが近づいているため、最終的にncursesのアイデアをあきらめました。プログラムがマルチスレッド (マルチプロセスではない) の場合は完全に動作しますが、fork を使用するとすべてがめちゃくちゃになります。とにかく、私は最終的なプロジェクトを ncurses で作成したので、まだ有用な提案です :)

4

1 に答える 1

2

あなたがWindowsとLinuxのどちらを使用しているかについては言及していません...この回答は、ほとんどの場合、Linuxを想定しています。

典型的な解決策は、ncursesのようなものを使用して画面を 2 つの「ウィンドウ」に分割し、他のクライアントから受け取ったメッセージを 1 つのウィンドウに表示し、入力内容を別のウィンドウに表示することです。curses は、端末制御コードを利用してカーソルを配置するなどの単純なコンソール ベースの GUI を提供するためのライブラリです。

クライアントを使用したことがある場合はirc、私が説明しているようなことをすでに経験しています。

ncurses プログラミング HOWTOがあり、ここから始めるのがよいでしょう。

于 2012-05-11T10:51:32.483 に答える