PowerPoint 프레젠테이션

Similar documents
The Pocket Guide to TCP/IP Sockets: C Version

vi 사용법

PowerPoint 프레젠테이션

<43B7CE20BECBBEC6BAB8B4C220BCD2C4CFC7C1B7CEB1D7B7A1B9D62E687770>

The Pocket Guide to TCP/IP Sockets: C Version

PowerPoint 프레젠테이션

Microsoft Word - KPMC-400,401 SW 사용 설명서

The Pocket Guide to TCP/IP Sockets: C Version

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

Microsoft PowerPoint - lab14.pptx

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

2009년 상반기 사업계획

제1장 Unix란 무엇인가?

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 6 가지중하나. (1) 프로그램수행직후, (2) 5 초후 (3) 10 초후 (4) 15 #include <signa

본 강의에 들어가기 전

Microsoft Word - Network Programming_NewVersion_01_.docx

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

학번 : 이름 1. 다음프로그램실행결과를예측하시오. $./a.out & [1] 7216 $ kill -USR $ kill -USR 아래학생이작성한쓰레드코드의문제점을설명하시오. void* thread_main() { pthread_mutex_t

untitled

PowerPoint 프레젠테이션

Sena Technologies, Inc. HelloDevice Super 1.1.0

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to TCP/IP Sockets: C Version

본 강의에 들어가기 전

The Pocket Guide to TCP/IP Sockets: C Version

chap7.key

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 4 가지중하나. (1) 프로그램수행직후, (2) kill 명령실행직후, (3) 15 #include <signal.

[ 목차 ] 1. 취약점개요 2. 배경지식 3. 취약점발생결과 (exploit 테스트 ) 4. 취약점발생원인분석 4.1 취약점 Q&A 5. exploit 분석 6. 보안대책 7. 결론 8. 레퍼런스 2

The Pocket Guide to TCP/IP Sockets: C Version

제1장 Unix란 무엇인가?

PowerPoint 프레젠테이션

SYN flooding

PowerPoint 프레젠테이션

/chroot/lib/ /chroot/etc/

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

0x00 Contents 0x About Nickster 0x Analaysis 0x Exploit

1장. 유닉스 시스템 프로그래밍 개요

Microsoft PowerPoint - lab15.pptx

PowerPoint 프레젠테이션

歯9장.PDF

untitled

PowerPoint 프레젠테이션


The Pocket Guide to TCP/IP Sockets: C Version

4. What will be the output of this program? Explain results for each variable and each thread. #include "apue.h" int var=1; pthread_mutex_t lock; void

제1장 Unix란 무엇인가?

<43B7CE20BECBBEC6BAB8B4C C5EBBDC52E687770>

교육지원 IT시스템 선진화

untitled

C++-¿Ïº®Çؼ³10Àå

<4D F736F F D2034C0E52D554E495820BCD2C4CF20C0C0BFEB20C7C1B7CEB1D7B7A1B9D6>

슬라이드 1

Microsoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt

K&R2 Reference Manual 번역본

untitled

KEY 디바이스 드라이버


ronny report( wooyaggo, hkpco ).hwp

PowerPoint 프레젠테이션

Microsoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

: 1 int arr[9]; int n, i; printf(" : "); scanf("%d", &n); : : for(i=1; i<10; i++) arr[i-1] = n * i; for(i=0; i<9; i++) if(i%2 == 1) print

BMP 파일 처리

6주차.key

PowerPoint 프레젠테이션

Microsoft PowerPoint - Supplement-02-Socket Overview.ppt [호환 모드]

강의10

제1장 Unix란 무엇인가?

Microsoft PowerPoint - 04-UDP Programming.ppt

IPv6 적용

1장. 유닉스 시스템 프로그래밍 개요

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap12-고급기능.pptx

본 강의에 들어가기 전

03장.스택.key


Microsoft PowerPoint - 15-EmbedSW-10-Socket

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBA20BBFDBCBAB0FA20BDC7C7E0205BC8A3C8AF20B8F0B5E55D>

2009년 상반기 사업계획

목차 목차포트스캔코드포트스캔결과포트스캔탐지코드포트스캔탐지결과 참조

11장 포인터

제12장 파일 입출력

[Beist 배 MINI HACKING CONTEST 풀이 ] By beistlab( [silly1] - silly 한문제입니다. 문제파일을실행하면./netstat_loop 1 이런식으로 nets

5.스택(강의자료).key

PowerPoint 프레젠테이션

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

fprintf(fp, "clf; clear; clc; \n"); fprintf(fp, "x = linspace(0, %d, %d)\n ", L, N); fprintf(fp, "U = [ "); for (i = 0; i <= (N - 1) ; i++) for (j = 0

EA0015: 컴파일러

Microsoft PowerPoint oshw1&2.ppt [호환 모드]

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

Microsoft PowerPoint - chap10-함수의활용.pptx

untitled

chap8.PDF

슬라이드 1

Transcription:

Network Programming Jo, Heeseung

Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용 Network 실습에서는 TCP/IP 소켓통신을이용하여 Server/Client 채팅프로그램을작성 2

Server/Client 채팅프로그램을작성 Server 채팅프로그램은 HBE-SM5-S4210에서실행 Client 채팅프로그램은리눅스에서실행 chat_server 채팅채팅서버서버 SMIII-SV210 SM5-S4210 chat_client chat_client chat_client 채팅클라이언트리눅스 (Ubuntu-8.04, fedora8,...) 3

Server 채팅프로그램 소스파일작성 - chat_server.c 를작성 root@ubuntu:/working/3.network/chatting/chat_server-arm# vi chat_server.c 001: #include <stdio.h> 002: #include <stdlib.h> 003: #include <unistd.h> 004: #include <string.h> 005: #include <arpa/inet.h> 006: #include <sys/types.h> 007: #include <sys/socket.h> 008: #include <netinet/in.h> 009: #include <pthread.h> 010: 011: #define BUFSIZE 100 4

012: 013: void * clnt_connection(void *arg); 014: void send_message(char * message, int len); 015: void error_handling(char *message); 016: 017: int clnt_number=0; 018: int clnt_socks[10]; 019: pthread_mutex_t mutx; 020: 021: int main(int argc, char **argv) 022: { 023: int serv_sock; 024: int clnt_sock; 025: int clnt_addr_size; 026: int option=1; 027: struct sockaddr_in serv_addr; 028: struct sockaddr_in clnt_addr; 029: pthread_t thread; 030: 031: printf("================================\n"); 032: printf("tcp/ip Chatting Program - Server\n"); 5

033: printf("================================\n\n"); 034: 035: if(argc!=2) { 036: printf("usage : %s <port>\n", argv[0]); 037: exit(1); 038: } 039: 040: if(pthread_mutex_init(&mutx, NULL)) 041: error_handling("mutex init error"); 042: 043: serv_sock=socket(pf_inet, SOCK_STREAM, 0); 044: if(serv_sock == -1) 045: error_handling("socket() error"); 046: 047: setsockopt(serv_sock, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)); 048: 049: memset(&serv_addr, 0, sizeof(serv_addr)); 050: serv_addr.sin_family=af_inet; 051: serv_addr.sin_addr.s_addr=htonl(inaddr_any); 052: serv_addr.sin_port=htons(atoi(argv[1])); 053: 6

054: if(bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1) 055: error_handling("bind() error"); 056: 057: if(listen(serv_sock, 5)==-1) 058: error_handling("listen() error"); 059: 060: while(1){ 061: clnt_addr_size=sizeof(clnt_addr); 062: clnt_sock=accept(serv_sock, (struct sockaddr*) &clnt_addr, &clnt_addr_size); 063: 064: pthread_mutex_lock(&mutx); 065: clnt_socks[clnt_number++]=clnt_sock; 066: pthread_mutex_unlock(&mutx); 067: 068: pthread_create(&thread, NULL, clnt_connection, (void*)clnt_sock); 069: printf(" IP : %s \n", inet_ntoa(clnt_addr.sin_addr)); 070: } 071: return 0; 072: } 7

073: 074: void * clnt_connection(void *arg) 075: { 076: int clnt_sock= (int)arg; 077: int str_len=0; 078: char message[bufsize]; 079: int i; 080: 081: while( (str_len=read(clnt_sock, message, sizeof(message)))!= 0) 082: send_message(message, str_len); 083: 084: pthread_mutex_lock(&mutx); 085: for(i=0; i<clnt_number; i++){ 086: if(clnt_sock == clnt_socks[i]){ 087: for( ; i<clnt_number-1; i++) 088: clnt_socks[i]=clnt_socks[i+1]; 089: break; 090: } 091: } 092: clnt_number--; 8

093: pthread_mutex_unlock(&mutx); 095: close(clnt_sock); 096: return 0; 097: } 099: void send_message(char * message, int len) 100: { 101: int i; 102: 103: message[len]=0; 104: fputs(message, stdout); 105: pthread_mutex_lock(&mutx); 106: for(i=0; i<clnt_number; i++) 107: write(clnt_socks[i], message, len); 108: pthread_mutex_unlock(&mutx); 109: bzero(message, sizeof(message)); 110: } 112: void error_handling(char *message) 113: { 114: fputs(message, stderr); 115: fputc('\n', stderr); 116: exit(1); 117: } 9

Makefile 작성 root@ubuntu:/working/3.network/chatting/chat_server-arm# vi Makefile CC= arm-linux-gcc APP=chat_server CFLAGS = -D_REENTRANT -lpthread OBJS=chat_server.o all: $(APP) $(APP): $(OBJS) $(CC) $(CFLAGS) -o $@ $^ clean: rm -f $(OBJS) $(APP) 10

컴파일 root@ubuntu:/working/3.network/chatting/chat_server-arm# make arm-linux-gcc -c -D_REENTRANT -lpthread -o chat_server.o chat_server.c arm-linux-gcc -D_REENTRANT -lpthread -o chat_server chat_server.o root@ubuntu:/working/3.network/chatting/chat_server-arm# ls Makefile chat_server chat_server.c chat_server.o 테스트 board 에전송후 board 에서실행 11

chat_server 를실행 [root@sm5s4210 ~]#./chat_server ================================ TCP/IP Chatting Program - Server ================================ Usage :./chat_server <port> [root@sm5s4210 ~]#./chat_server 9000 ================================ TCP/IP Chatting Program - Server ================================ 12

Client 채팅프로그램 HBE-SM5-S4210 에서실행한 Server 채팅프로그램에접속할 Client 채팅프로그램을리눅스 (Ubuntu-10.10) 용으로작성 소스파일작성 - chat_client.c 를작성 root@ubuntu:/working/3.network/chatting/chat_client-x86# vi chat_client.c 001: #include <stdio.h> 002: #include <stdlib.h> 003: #include <unistd.h> 004: #include <string.h> 005: #include <arpa/inet.h> 006: #include <sys/types.h> 13

007: #include <sys/socket.h> 008: #include <pthread.h> 009: 010: #define BUFSIZE 100 011: #define NAMESIZE 20 012: 013: void * send_message(void *arg); 014: void * recv_message(void *arg); 015: void error_handling(char *message); 016: 017: char name[namesize]="[default]"; 018: char message[bufsize]; 019: 020: int main(int argc, char **argv) 021: { 022: int sock; 023: struct sockaddr_in serv_addr; 024: pthread_t snd_thread, rcv_thread; 025: void * thread_result; 026: 027: printf("================================\n"); 028: printf("tcp/ip Chatting Program - Client\n"); 14

029: printf("================================\n\n"); 030: 031: if(argc!=4){ 032: printf("usage : %s <IP> <port> <name>\n", argv[0]); 033: exit(1); 034: } 035: 036: sprintf(name, "[%s]", argv[3]); 037: 038: sock=socket(pf_inet, SOCK_STREAM, 0); 039: if(sock==-1) 040: error_handling("socket() error"); 041: 042: memset(&serv_addr, 0, sizeof(serv_addr)); 043: serv_addr.sin_family=af_inet; 044: serv_addr.sin_addr.s_addr=inet_addr(argv[1]); 045: serv_addr.sin_port=htons(atoi(argv[2])); 046: 047: if(connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1) 048: error_handling("connect() error"); 049: 15

050: pthread_create(&snd_thread, NULL, send_message, (void*)sock); 051: pthread_create(&rcv_thread, NULL, recv_message, (void*)sock); 052: 053: pthread_join(snd_thread, &thread_result); 054: pthread_join(rcv_thread, &thread_result); 055: 056: close(sock); 057: return 0; 058: } 059: 060: void * send_message(void *arg) 061: { 062: int sock = (int)arg; 063: char name_message[namesize+bufsize]; 064: while(1) { 065: fgets(message, BUFSIZE, stdin); 066: if(!strcmp(message,"q\n")) { 067: close(sock); 068: exit(0); 069: } 070: sprintf(name_message,"%s %s", name, message); 071: write(sock, name_message, strlen(name_message)); 16

072: } 073: } 074: 075: void * recv_message(void *arg) 076: { 077: int sock = (int)arg; 078: char name_message[namesize+bufsize]; 079: int str_len; 080: int f_read=1; 081: 082: while(f_read){ 083: str_len = read(sock, name_message, NAMESIZE+BUFSIZE-1); 084: if(str_len==-1) f_read=0; 085: else { 086: name_message[str_len]=0; 087: fputs(name_message, stdout); 088: } 089: } 090: } 091: 17

092: void error_handling(char *message) 093: { 094: fputs(message, stderr); 095: fputc('\n', stderr); 096: exit(1); 097: } 18

Makefile 작성 root@ubuntu:/working/3.network/chatting/chat_client-x86# vi Makefile CC= gcc APP=chat_client CFLAGS = -D_REENTRANT -lpthread OBJS=chat_client.o all: $(APP) $(APP): $(OBJS) $(CC) $(CFLAGS) -o $@ $^ clean: rm -f $(OBJS) $(APP) 19

컴파일 root@ubuntu:/working/3.network/chatting/chat_client-x86# make gcc -c -D_REENTRANT -lpthread -o chat_client.o chat_client.c gcc: -lpthread: linker input file unused because linking not done gcc -D_REENTRANT -lpthread -o chat_client chat_client.o root@ubuntu:/working/3.network/chatting/chat_client-x86# ls Makefile chat_client chat_client.c chat_client.o 21

chat_client 실행 생성된 chat_client 파일을리눅스에실행하여채팅서버에접속 root@ubuntu:/working/3.network/chatting/chat_client-x86#./chat_client ================================ TCP/IP Chatting Program - Client ================================ Usage :./chat_client <IP> <port> <name> root@ubuntu:/working/3.network/chatting/chat_client-x86#./chat_client 192.168.0.150 9000 park ================================ TCP/IP Chatting Program - Client ================================ 22