Compiler report- 예약어 검색 및 수정 프로그램 -20011579강 병 재■ 프로그램 설명- 본 프로그램은 C언어로 작성된 프로그램을 입력받아 예약어를 모두 검색하여 예약어 만을 대문자로 바꿔주는 프로그램이다. 위 프로그램은 다른 단어 안에 예약어와 동등한 캐릭터가 있는 경우나 주석문 까지 처리를 하였다.■ 프로그램 분석- 본 프로그램은 fgets함수를 통하여 한 줄씩 읽어 온다. 그리고 strstr함수를 통하여 reserve배열 안에 있는 모든 예약어들이 있는지 확인하게 되며 확인된 예약어는 아스키 코드값을 32를 뺌으로서 대문자로 치환하며 단어 사이에 예약어가 존재하는 경우나 주석문 같은 경우는 특별한 처리를 하였다.■ 프로그램 소스#include #include #include char *buf;int com2_f = 0;int line_num=0;int com2_s, com2_t;char tmp[512];char *reserve[] = {"auto" , "break", "case", "char", "const", "continue", "default", "do","double", "else", "enum", "extern", "float", "for", "goto", "if","int", "long", "register", "return", "short", "signed", "sizeof", "static","struct", "switch", "typedef", "union", "unsigned", "void", "volatile", "while" };void change(char *);int main(int argc, char *argv[]) {FILE *sp, *dp;if(argc != 2) {printf("Usage : Input File name! n");exit(1);}/* int char */if((sp = fopen(argv[1], "r")) == NULL) {printf("Can't search file.n");exit(0);}if((dp = fopen("Changed.c", "w+")) == NULL) {printf("Can't Make file. n");exit(0);}while(fgets(tmp, 512, sp) != NULL) {change(tmp);fputs(tmp, dp);}fseek(dp, 00, SEEK_SET);while(fgets(tmp, 512, dp) != NULL) {printf("%s", tmp);}return 0;}void change(char *line) {int i, k;int l;//검색된 문자 바로 앞 의 포인터 검색을 위해char *t;char *line_t;// 예약어가 중간에 끼엇을경우char *com1, *com2_1, *com2_2;int com1_f = 0;com1_f = 0;line_num++;line_t = line;if((com2_1 = (char *)strstr(line, "/*")) != NULL) {com2_f = 1;com2_s = line_num;}if((com2_2 = (char *)strstr(line, "*/")) != NULL) {com2_f = 0;com2_t = line_num;}// '//'주석 검색if((com1 = (char *)strstr(line, "//")) != NULL) {com1_f = 1;}// 주석 사이에 있을경우if(com2_f == 1 && line_num > com2_s || line_num < com2_t ) {return;}for(i=0; i
Network Programming report학번 : 20011579이름 : 강 병 재■ 프로그램 설명- 본 프로그램은 P2P 파일공유 시스템이다. 즉 Server-Client 시스템으로 서버에서는 클라이언트의 공유파일의 목록과 함께 IP를 저장하여 다른 클라이언트에게서 쉽게 서버에 접속만 하면 전체 리스트 보기 및 검색, 접속자 리스트를 보여줄 수 있다. 만약 필요한 목록이 서버에서 검색되었다면 클라이언트에서 서버로 파일을 요구하게 되고 서버에서는 자동으로 파일의 소유자와 파일을 원하는 사람 간에 새로운 1:1 Server-Client 통신을 개설하게 하여 파일전송이 되게끔 만드는 프로그램이다.■ 시스템 구현 기술? Server- 비동기 방식으로 FD_SET, FD_ZERO, FD_ISSET, select등의 함수를 통하여 클라이언트의 메시지를 확인한다. FD_ZERO로 소켓 테이블 초기화를 하고 FD_SET를 통하여 SETTING을 한다.FD_ISSET을 통하여 변화를 감시하며 select를 통하여 테이블을 구성하게 된다.? Client- Thread를 사용하여 Server로부터의 메시지 수신을 확인하는 스레드와 키보드로부터 메시지 수신 및 처리하는 스레드로 나워서 구동된다.■ 시스템 구동 방식? 1단계 : 클라이언트가 서버에 접속 요청을 하게 된다.? 2단계 : 클라이언트가 자체 내에서 공유 테이블을 작성하여 구조체로 서버에 전송하게 된다.? 3단계 : 서버에서는 클라이언트에서 받은 테이블을 토데로 모든클라이언트의 공유테이블을 자신이 관리하는 테이블로 작성 하게 되며 클라이언트는 서버가 가지고 있는 테이블을 언제든 검색하여 원하는 파일을 찾을수 있다.? 4단계 : 위의 그림과 같이 Client3이 Client1의 File.dat 파일을 원하는 경우 아래와 같이 Server에서 Client1과 Client3에게 둘만의 Server-Client통신요청 메시지를 보내게 된다.? 5단계 : Client1에서는 서버에서 할당해준 port로 서버소켓을 따로 개설하고 Client3역시 서버에서 할당해준 port로 클라이언트 소켓을 따로 개설하여 파일을 전송받게 되며 Client1과 Client3은 전송 및 수신을 마친 후 개설된 소켓을 닫게 된다.■ 프로그램 소스? 서버/*----------------------------------------------------------------파일명 : server.c기 능 : P2P 방식의 파일공유 시스템리눅스 : gcc -o server server.c유닉스 : gcc -o server server.c -lsocket -lnsl사용법 : server 3000----------------------------------------------------------------*/#include #include #include #include #include #include #include #include #include "file_list.h"#define MAXLINE 512#define MAX_SOCK 64char *escapechar = "exit";int getmax(int);void viewListAll(int);int searchFile(char *, int);void clientView(int);void sendMessage(char *, int);void printList(int, int);void gatherInfo(int); /* 클라이언트 파일 공유테이블 작성 */void removeClient(int); /* 클라이언트 탈퇴 처리 함수 */int maxfdp1; /* 최대 소켓번호 +1 */int num_client = 0; /* 클라이언트 연결 수 */int client_s[MAX_SOCK]; /* 연결된 클라이언트 소켓번호 목록 */char recv_buf[MAXLINE], send_buf[MAXLINE], temp[MAXLINE], file[MAXLINE];struct sockaddr_in client_addr, server_addr;f_data client_file[5];int s_result[5]; /* 검색결과 목록 */int s_count, port; /* 검색결과 개수 */int main(int argc, char *argv[]){char recv_buf[MAXLINE], send_buf[MAXLINE];int i, j, n, k;int s, client_fd, clilen;fd_set read_fds; /* 읽기를 감지할 소켓번호 구조체 */if(argc != 2){printf("사용법 : %s portn", argv[0]);exit(0);}/* 초기소켓 생성 */if((s = socket(PF_INET, SOCK_STREAM, 0)) < 0){printf("Server : Can't open stream socket.");exit(0);}/* server_addr 구조체의 내용 세팅 */bzero((char *)&server_addr, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = htonl(INADDR_ANY);server_addr.sin_port = htons(atoi(argv[1]));if(bind(s, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0){printf("Server : Can't bind local address.n");exit(0);}/* 클라이언트로부터 연결요청을 기다림 */listen(s, 5);port = 3000;maxfdp1 = s + 1; /* 최대 소켓번호 + 1 */while(1){FD_ZERO(&read_fds);FD_SET(s, &read_fds);for(i=0; i
Network Programming■ 프로그램 설명- 본 프로그램은 네트워크 소켓 통신을 이용한 우편번호 검색시스템입니다. 이 프로그램은 서버-클라이언트의 1:1 방식으로 사용된 기술로는 통신을 위해서는 리눅스 소켓을 사용하였으며 데이터베이스 관리를 위하여 파일 입출력을 사용하였습니다. 모든 데이터는 서버에서 관리하며 클라이언트는 이 데이터를 추가, 검색, 삭제 및 전체 보기 그리고 종료가 선택가능하게 하엿습니다.■ 클라이언트 - 서버 동작방식- 서버 - - 클라이언트 -서버 - 클라이언트는 1:1 방식의 통신 소켓 모드로 기본적인 절차를 모두 준수한다. 추가적으로 프로그램상 서버에서는 두 번의 while문으로 메시지 접수하여 처리하며 클라이언트는 한번만 사용하여 모든 메시지를 송신 및 접수하게 된다.■ 소스 프로그램// 서버 프로그램#include #include #include #include #include #include #define BUF_SIZE 128#define DATA_SIZE 128#define TEMP_SIZE 128int main(int argc, char *argv[]){struct sockaddr_in server_addr, client_addr;int server_fd, client_fd;int len, msg_size, i, data_size, temp_size, k, n;char buf[BUF_SIZE], data[DATA_SIZE], temp[TEMP_SIZE];FILE *fp;char *p;if(argc != 2) {printf("Usage : %s portn", argv[0]);exit(0);}/* Create socket */if((server_fd = socket(PF_INET, SOCK_STREAM, 0))