The Pocket Guide to TCP/IP Sockets: C Version

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

The Pocket Guide to TCP/IP Sockets: C Version

PowerPoint 프레젠테이션

The Pocket Guide to TCP/IP Sockets: C Version

vi 사용법

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

2009년 상반기 사업계획

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

BMP 파일 처리

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

bn2019_2

0. 들어가기 전

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

본 강의에 들어가기 전

Microsoft PowerPoint - 03-TCP Programming.ppt

SMB_ICMP_UDP(huichang).PDF

chap7.key

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E >

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

HLS(HTTP Live Streaming) 이용가이드 1. HLS 소개 Apple iphone, ipad, ipod의운영체제인 ios에서사용하는표준 HTTP 기반스트리밍프로토콜입니다. 2. HLS 지원대상 - 디바이스 : iphone/ipad/ipod - 운영체제 :

歯9장.PDF

K&R2 Reference Manual 번역본

본 강의에 들어가기 전

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

게시판 스팸 실시간 차단 시스템

PowerPoint 프레젠테이션

Microsoft PowerPoint - 04-UDP Programming.ppt

금오공대 컴퓨터공학전공 강의자료

슬라이드 1

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

PowerPoint 프레젠테이션

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

제1장 Unix란 무엇인가?

PowerPoint 프레젠테이션

본 강의에 들어가기 전

Microsoft PowerPoint - 제11강 파일 처리

Microsoft PowerPoint - ch09_파이프 [호환 모드]

2009년 상반기 사업계획

Microsoft Word doc

10.

<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D>


제1장 Unix란 무엇인가?

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

Microsoft PowerPoint - 10Àå.ppt

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

1217 WebTrafMon II


Chapter 4. LISTS

2009년 상반기 사업계획

슬라이드 1

1 1. INTRODUCTION 2 2. DOWNLOAD Windows Desktop & Server Max OS X, Linux, Windows CE 2 3. API REFERENCE CAN_OpenVcp CAN_Op

Microsoft Word - Network Programming_NewVersion_01_.docx

<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

일반적인 네트워크의 구성은 다음과 같다

망고100 보드로 놀아보자-4

PowerPoint 프레젠테이션

Windows 8에서 BioStar 1 설치하기

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

/chroot/lib/ /chroot/etc/

PowerPoint 프레젠테이션

chap 5: Trees

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

TTA Journal No.157_서체변경.indd

Secure Programming Lecture1 : Introduction

USB2CAN USB2CAN-UART USB2CAN-FIFO API Reference Manual Copyright NTREXLAB

Microsoft PowerPoint 웹 연동 기술.pptx

슬라이드 1

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Chapter 4 UDP 소켓 사용법

untitled

untitled

Microsoft PowerPoint - 알고리즘_4주차_1차시.pptx

제1장 Unix란 무엇인가?


자식농사웹완

chungo_story_2013.pdf

*중1부

2

Çѱ¹ÀÇ ¼º°øº¥Ã³µµÅ¥

...._



전반부-pdf

표1.4출력

003-p.ps

<4D F736F F F696E74202D20312E20B0E6C1A6C0FCB8C15F3136B3E2C7CFB9DDB1E25F325FC6ED28C0BA292E >

_

12월월간보고서내지편집3

중앙도서관소식지겨울내지33

에너지포커스 2007년 가을호


01_당선자공약_서울

인권문예대회_작품집4-2



Transcription:

인터넷프로토콜 5 장 데이터송수신 (3) 1

파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes) FileSize (4bytes) Filecontents (0~4GB) 메시지헤더 메시지데이터 2 struct msghdr { char filename[255]; unsigned int filesize;

파일전송메시지구성예제 ( 문자열메시지 ) 전송방식 : 가변길이 ( 문자열전송방식 ) 필요한전송정보 구분자 (!$ : 임의로결정, 단파일이름이나길이에나오지않아야함 ) 파일이름 ( 크기제한없음, 필드의크기는파일이름에따라가변 ) 파일크기 ( 크기제한없음, 필드의크기는파일크기에따라가변 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 (255bytes 의 helloworld.c 를전송할경우 ) Helloworld.c!$255!$ Filecontents (0~4GB) 메시지헤더 메시지데이터 3

파일내용의전송 파일크기가소켓버퍼의크기보다크므로아래와같이순차적전송 #define BUFSIZE 1024 char filebuf[bufsize]; fp = fopen( test.txt", "r"); if(fp == NULL) DieWithError ("File open error"); while(1){ len=fread(filebuf, sizeof(char), BUFSIZE, fp); send(sock, filebuf, len, 0); if(feof(fp)) break; 4

파일내용의수신 #define BUFSIZE 1024 char filebuf[bufsize]; recvfilesize=0; fp = fopen( test.txt", w"); if(fp == NULL) DieWithError ("File open error"); while(origfilesize>recvfilesize) { if ((recvmsgsize = recv(clntsock,filebuf,bufsize, 0)) < 0) DieWithError("recv() failed"); recvfilesize+=recvmsgsize; fwrite(filebuf, sizeof(char), BUFSIZE, fp); 5

응용과제 2 기존에코프로그램을수정하여다음의기능을가지는프로그램을작성하라 클라이언트 : 클라이언트명령어의두번째인자를에코문자열대신파일이름으로받아들여파일을서버에전송하라 Ex) FileClient lily.mmu.ac.kr test.txt 5000 서버 : 해당파일은서버의실행파일이존재하는디렉토리에동일한이름으로저장되도록한다. 6

좀더복잡한메시지구성 7

파일전송의예 메시지구성 char FileName[256]; int FileSize; char FileBuffer[1024]; Server FileName FileSize File Contents Client recv(clntsock, FileName, 256, 0) recv(clntsock, FileSize, 4, 0) while(notrecvfullfile()) { recv(sock, FileBuffer, 1024,0) send(sock, FileName, 256, 0) send(sock, FileSize, 4, 0) while(feof(fd)) { Send(sock, FileBuffer, 1024,0) 8

에코와파일전송을모두지원하는 상황 예 프로토콜 클라이언트는서버에게 string 혹은파일을업로드할수있다. 서버는 string 을받을경우 echo 를해주고파일을받을경우, 디스크에저장을한후잘받았다는메시지를 (acknowledge) 회신한다 클라이언트는 echo 메시지를수신한경우,echo 메시지를출력하고, file ack 를받을경우 file ack 를출력한다 client lily.mmu.ac.kr upload test.txt 5000 // 파일전송 client lily.mmu.ac.kr echo hello 5000 // 에코메시지 9

메시지 ( 프로토콜 ) 설계 서버와클라이언트는동일프로그램으로두개의다른상황을모두만족해야함 EchoString Server File Upload string Echostring Client FileName FileSize File Contents Server Client 서버의입장에서클라이언트의서비스요청이에코요청인지파일업로드인지구분할수있는방법은? 서비스타입 ( 에코요청, 파일업로드 ) 필드를준비하고클라이언트를이를통해서버에게서비스종류를알림 10

바이너리프로토콜설계 EchoString /* Message Type */ #define EchoReq 01 #define FileUpReq 02 #define EchoRep 11 #define FileAck 12 char ; Server string Echostring Client File Upload FileName FileSize File Contents Server Client 11

클라이언트핵심코드 ( 바이너리프로토콜 ) /* Message Type */ #define EchoReq 01 #define FileUpReq 02 #define EchoRep 11 #define FileAck 12 char ; char * operation; //client 203.252.164.144 upload test.txt 5000 operation=argv[2] If (!strcmp(operation, upload )) =FileUpReq send(sock, &, 1,0) else if (!strcmp(operation, echo )) =EchoReq send(sock, &,1,0) else { FileName FileSize File Contents string fprintf(stderr, "Usage: %s <Server IP> <operation><operand> <Echo Port>\n", argv[0]); exit(1); 12

/* Message Type */ #define EchoReq 01 #define FileUpReq 02 #define EchoRep 11 #define FileAck 12 char ; recv(clntsock, &,1,0) 서버핵심코드 ( 바이너리프로토콜 ) if (==FileUpReq) { recv(clntsock, FileName, =FileAck; send(clntsock, &, 1,0); else if(==echoreq) { recv(clntsock, EchoString, =EchoRep; send(clntsock, EchoString,); else fprintf(stderr, Bad request ) FileName FileSize File Contents string 13

문자열프로토콜설계 /* Message Type */ #define EchoReq #define FileUpReq #define EchoRep #define FileAck char [10]; EchoReq FileUpReq EchoRep FileAck Server string Echostring Client FileName FileSize File Contents Server Client 14

/* Message Type */ #define EchoReq EchoReq #define FileUpReq FileUpReq #define EchoRep EchoRep #define FileAck FileAck #define Delimeter 클라이언트핵심코드 ( 문자열프로토콜 ) char msgtype[10]; char * operation; //client 203.252.164.144 upload test.txt 5000 operation=argv[2] If (!strcmp(operation, upload )) strcpy(msgtype, FileUpReq); send(sock, msgtype, strlen(msgtype),0) else if (!strcmp(operation, echo )) strcpy(msgtype, EchoReq); send(sock, msgtype,strlen(msgtype,0) else { fprintf(stderr, "Usage: %s <Server IP> <operation><operand> <Echo Port>\n", argv[0]); exit(1); FileName FileSize File Contents string 15

/* Message Type */ #define EchoReq EchoReq #define FileUpReq FileUpReq #define EchoRep EchoRep #define FileAck FileAck #define Delimeter 서버핵심코드 ( 문자열프로토콜 ) char msgtype[10], recvchar; int i=0; while(i<10) { recvchar=recv(clntsock, msgtype[i],sizeof(char),0); if (msgtype[i]==delimeter) break; ++i; if (!(strcmp(msgtype,filereq)) { recv(clntsock, FileName, strcpy(msgtype,fileack); send(clntsock, msgtype, strlen(msgtype),0); else if(!(strcmp(msgtype, EchoReq)) { recv(clntsock, EchoString, strcpy(msgtype,echorep);; send(clntsock, msgtype, strlen(msgtytpe),0); else fprintf(stderr, Bad request ) FileName FileSize File Contents string 16

응용과제 3 에코와파일전송을모두지원하는프로토콜을정의하고, 서버와클라이언트를작성하여동작을확인하시오. 전송프로토콜 (tcp/udp) - 학번끝자리 ( 짝수 / 홀수 ) 인코딩 / 디코딩 (text / binary) - 학번끝에서 2 번째자리 ( 짝수 / 홀수 ) TCP 의경우 length 프레이밍이용 17

응용과제 4 파일전송 / 수신클라이언트 - 서버구현 기능 : get ( 파일가져오기 ) put ( 파일보내기 ) ls ( 서버측파일보여주기 ) cd ( 서버측디렉토리변경 ) quit( 종료 ) 2 학년 UNIX 프로그래밍참고 18