我必須用C寫一個簡單的聊天。一個程序是客戶端連接的服務器,它管理他們發送的消息。客戶端是另一個程序,在這裏我遇到了問題。我希望能夠接收來自其他客戶端的消息(通過服務器)並在控制檯輸出中打印它們。然而,同時我希望能夠編寫自己的消息並將其發送到服務器(並因此發送給其他客戶端)。
問題是,當我寫一些消息時,同時從服務器接收一個消息,整個輸入就會混亂。我想以某種方式分離消息輸出區域和消息輸入區域。有沒有什麼好的方法可以做到這一點?這是我在客戶端程序叉(仍然是一個草案):基於控制檯的聊天。如何分離消息和輸入?
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的應用程序,但有一個更的問題。當我有兩個進程(在fork()之後)時,如何在ncurses中寫入同一個窗口?他們似乎有他們單獨的窗口,我可以提供輸入或從服務器讀取輸出,但不能在一個屏幕上。任何建議?我不想在它們之間建立IPC,只是在客戶端和服務器之間。
編輯2:
我終於放棄了ncurses的想法,由於接近的截止日期。如果程序是多線程的(不是多處理的),那麼它可以很好地工作,但是使用fork的時候它變得一團糟。無論如何,這是我最後的項目中的ncurses,所以仍然是一個有用的建議:)
你有沒有考慮過使用ncurses? – dwalter
您可以查看舊的unix [talk](ftp://ftp.irisa.fr/pub/OpenBSD/src/usr.bin/talk/)命令的源代碼以選擇一些想法。 – mouviciel