2011년7월28일_네트워크프로젝트(3일차)-입력창(window)과 출력창을 나누어 출력, ncurses.h사용
● 채팅프로그램 방향정하기 1. 입력 창과 로그창을 분리하여 보기 좋게함. <-오늘 할 일 2. 한 번에 여러 줄을 입력할 수 있게 입력처리부분을 추가 3. TCP서버외에 UDP프로토콜을 사용하면 서버없이 클라이언트들 끼리 통신이 가능하지 않을까? 아니면... 하나의 프로그램이 서버와 클라이언트 프로세스 둘 다 돌리면 될 것 같음. 4. 채팅만 하면 지루하니 게임적인 요소를 추가. (몬스터를 잡으면 레벨업~!) 5. 채팅서버의 IP를 입력하지 않으면 디폴트 채팅서버에 접속. |
네이트온과 같은 메신저처럼 입력받는 박스를 밑에 두고 대화내용이 출력되는 박스는 위에 둔다.
접속자리스트는 특수명령을 입력하면 출력창에 추가되는 것으로 한다.
● 소스코드
1: #include <ncurses.h>
2: #include <string.h>
3:
4: int main()
5: {
6: WINDOW *win_input;
7: WINDOW *win_output;
8: WINDOW *win_output_panel;
9: int i;
10:
11: char buf[100];
12: const char *exit = "exit";
13:
14: initscr();
15: refresh();
16:
17: win_output = newwin(LINES - 10, COLS - 1, 1, 1);
18: box(win_output, 0, 0);
19: wrefresh(win_output);
20:
21: win_output_panel = newwin(LINES - 9, COLS, 0, 0);
22: box(win_output_panel, 0, 0);
23: wrefresh(win_output_panel);
24:
25: win_input = newwin(5, COLS, LINES - 10 + 1, 0);
26: box(win_input, 0, 0);
27: wrefresh(win_input);
28:
29: mvwprintw(win_output, 1, 10, "window내에 글자쓰기 테스트!!\n");
30: wrefresh(win_output);
31:
32: while(1)
33: {
34: mvwgetstr(win_input, 1, 1, buf);
35:
36: if(NULL != strstr(buf, exit))
37: {
38: break;
39: }
40:
41: wprintw(win_output, "%s\n", buf);
42:
43: for(i = 0 ; i < strlen(buf) ; i++)
44: {
45: buf[i] = 0x20;
46: }
47:
48: mvwprintw(win_input, 1, 1, "%s", buf);
49: wrefresh(win_output);
50: wrefresh(win_input);
51: }
52:
53: endwin();
54: }
불필요하게 리프레시를 많이 하는 소스코드이다.
사용자가 보는 시점에 리프레시하면 된다. 알아서 수정해서 쓰세요. ㅎㅎ
<실행결과>
문제가 있는데 ‘\n’개행문자를 출력하면 박스의 오른쪽이 없어진다. ㅠㅠ
그리고 더욱 치명적인 버그(?)가 있는데…
참조(Reference) |
http://wiki.kldp.org/wiki.php/NCURSES-Programming-HOWTO?action=show&redirect=FindPage