1 TCP/IP 소켓 프로그래밍 (C Version) 제 3 장 메시지 구성하기 2002. 10. 25 김 도 형.

Slides:



Advertisements
Similar presentations
기본 자료형 순천향대학교 정보기술공학부 이 상 정. 자료형의 선언 컴퓨터프로그래밍 1 순천향대학교 정보기술공학부 이 상 정 3 자료형 선언 기본 자료형문자형 char 정수형 int 실수형 float double 형없음 void.
Advertisements

멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
소켓 프로그래밍.  프로젝트 생성 ◦ Visual Studio 2008 ◦ Visual C# 2008 Express Edition ◦ 통합 개발 환경 (IDE)  서버 소켓  클라이언트 소켓  소켓 프로그램 실행  추적과 디버깅  소켓 클래스 메서드  소켓.
1 Prof. Young Jin Nam, Daegu University 컴퓨터 구조 (Computer Architecture) 명령어 세트 : 특성과 기능 남영진
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
TCP 서버/클라이언트 동작 원리 - (1) TCP 서버/클라이언트 예 웹 서버 웹 클라이언트 웹 클라이언트
프로그래밍1 및 실습 (C언어) - 3장 기본자료형 (3.6부터 끝까지) -
Vision System Lab, Sang-Hun Han
제 3 장 변수와 자료형.
Chapter 06. UDP 서버/클라이언트.
Department of Computer Engineering
PHP 웹 프로그래밍 (PHP Web Programming) 네트워크 프로그래밍 문양세 강원대학교 IT대학 컴퓨터과학전공.
Chapter 03. 소켓 주소 구조체 다루기.
Chapter 2 Socket Programming
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
4장: 자료형과 수식.
구조체 struct 구조체와 함수 구조체의 배열, sizeof 연산자 열거형 enum 형 정의 typedef
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
TCP Client/Server Program
Network Lab. Seoung Hyeon, Lee
컴퓨터 네트워크 PART 03 프로그래밍 (chapter 01 Socket 프로그래밍) 임효택
Chapter 11. Raw 소켓.
Linux System Programming
HW#1 Source 파일 제출 3.20(수)까지 제출 학번_이름_01.c
3장. 소켓 주소 구조체 다루기 소켓 주소 구조체의 정의와 초기화 방법을 익힌다.
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
11 소켓 프로그래밍 기초.
인터넷 주소 변환 School of Electronics and Information. Kyung Hee University.
제 12장 I/O멀티플렉싱(Multiplexing)
제 18 강 데이터 타입 타입, 변환, 캐스팅 shcho.pe.kr.
Department of Computer Engineering
(Web Programming & Practice)
Socket Address Structure and Byte Ordering Functions
Socket Address Structure and Byte Ordering Functions
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
Department of Computer Engineering
Advanced Socket Programming
제 2 장 변수와 상수.
제 2장 컴퓨터동작의 기본 개념.
Department of Computer Engineering
TCP/IP 통신망 특론 2장 Link Layer 컴퓨터 네트워크 실험실 이희규.
Chapter 03. 소켓 주소 구조체 다루기.
제 3 장 상수와 변수
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
임베디드 시스템을 위한 C프로그래밍 기법 3.7 ~ 4.5 장 Raphael.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
4주차: Data Types and Functions
5장. 상수와 기본 자료형. 5장. 상수와 기본 자료형 5-1 C 언어가 제공하는 기본 자료형 자료형(data type) 기본 자료형 사용자 정의 자료형 int val; "선언할 변수의 특징을 나타내기 위한 키워드" 기본 자료형 기본적으로 제공이 되는 자료형 사용자.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
헤더 파싱 ( Header Parsing ).
23강 API - II - 약방의 감초 Random 클래스 - Scanner 및 Sysout - Wrapper 클래스의 이해
제2장 데이터형과 표준 입출력문 문봉근.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 05. 상수와 기본 자료형.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Chapter 16 Socket Interface.
Byte Alignment ㈜ 웰컴정보시스템 김 정 은.
윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
제 14 장 응용 계층과 클라이언트-서버 모델 클라이언트-서버 모델 14.2 동시성 14.3 프로세스 14.4 요약.
성공적인 입사지원서 작성법 제이비커리어 교육수석 소 은 선.
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
3주차: Control Flow and Others
박성진 컴퓨터 프로그래밍 기초 [03] 변수와 자료형 박성진
Chapter 03. 소켓 주소 구조체 다루기.
printf("Global Korea\n");
Department of Computer Engineering
배열.
Presentation transcript:

1 TCP/IP 소켓 프로그래밍 (C Version) 제 3 장 메시지 구성하기 김 도 형

HANNAM UNIVERSITY 2 목차 0. 개요 1. 데이터 부호화 (Encoding Data) 2. 바이트 순서 (Byte Odering) 3. 정렬 (Alignment) 과 채워넣기 (Padding) 4. 틀짜기 (framing) 및 파싱 (Parsing)

HANNAM UNIVERSITY 3  소켓 애플리케이션 작성  하나의 애플리케이션 프로토콜 구현  프로그램  다른 프로그램에 정보 제공  다른 프로그램으로부터 제공된 정보 이용  송수신자간의 합의 필요  데이터 부호화 (data encoded)  송수신 정보의 종류  통신의 연결 및 종료의 방법 0. 개요

HANNAM UNIVERSITY 개요  소켓을 사용하는 대부분의 프로토콜  데이터 부호화 (data encoding)  메시지 포맷 (format)  파싱 (parsing)  TCP/IP 프로토콜  사용자 데이터의 각 바이트의 조사, 변경 없이 전송  어플리케이션들에 자신의 정보를 제공하기 위해 어떤 식으로 부호화 할 것인지에 대해 유연성 제공  대부분의 어플리케이션 : 필드로 구성된 메시지 이용  포맷, 파싱, 부분의 의미 추출 방법 규정 필요

HANNAM UNIVERSITY 5 가정  은행의 예  변수 ( 정수형 ) deposits, withdrawals  정수형 s : 통신을 위한 (TCP) 소켓의 식별자를 가지고 있음  크기  sizeof(int) 는 4 byte, sizeof(short) 는 2 byte  TCP ( send(), recv() ) 를 사용  특별한 조건 dl 없는 한 UDP 에서 동일하게 적용

HANNAM UNIVERSITY 데이터 부호화 (Encoding Data)  출금 (withdrawal) 및 예치 (deposit) 정보를 표현하는 방 법  숫자를 출력하는 십진수 (digit) 의 스트링 : ASCII 와 같은 문자 부호화 (character encoding) 에 따라 결정되는 바이트 순열  장점  숫자를 인쇄, 화면 윈도우에 표시할 때 사용되는 방식과 같음  임의의 큰 수들도 전송 가능

HANNAM UNIVERSITY 데이터 부호화 (Encoding Data)  두개의 필드 분할방법 ( 구획자 (delimeter) 사용 )  0(48)~9(57) 이외의 값으로 표현  일반적으로 null 바이트 사용  White space 바이트 ( 스페이스 또는 탭 )  첫번째 필드 (deposits), 두번째 필드 (withdrawals) 로 구성  예제  17,998,720, 47,034,615  Delimeter( 구분자 ) : ASCII (32) “ ““ ““5”“5”“1”“1”“6”“6”“4”“4”“3”“3”“0”“0”“7”“7”“4”“4”“ ”“ ”“0”“0”“2”“2”“7”“7”“8”“8”“9”“9”“9”“9”“7”“7”“1”“1” 18 bytes DIGIT ASCII

HANNAM UNIVERSITY 데이터 부호화 (Encoding Data)  보내는 프로그램의 구성 sprintf (s, msgBuffer, “ %d %d ”, deposits, withdreawals); send (s, msgBuffer, strlen(msgBuffer), 0); 공백 소켓식별자  Sprintf() 함수 포맷 스트링 끝에 공백 추가  출금액수 구분을 위함, 분리할 수 없음  msgBuffer 는 가능한 가장 큰 결과를 포함 할 수 있는 크기  9 자리 수 ( 부호 포함 ) 일 경우, 23 바이트 이상 크기를 가져야 함  Send() 함수의 strlen() 은 메시지 두 필드를 구성하는 바이트만 계산

HANNAM UNIVERSITY 데이터 부호화 (Encoding Data)  잘못 된 예 #define BUFSIZE 132 Char msgBuffer [BUFSIZE]; sprintf (s, msgBuffer, “ %d %d ”, deposits, withdreawals); send (s, msgBuffer,BUFSIZE, 0); 수신측 프로그램이 두 번째 스페이스를 넘어서 추가 바이트 수신 65 가 아닐경우, gabage 포함

HANNAM UNIVERSITY 데이터 부호화 (Encoding Data) 송신자가 구조체를 사용하는 방법. struct { int dep; int wd; } msgStruct msgStruct.dep = deposits; msgStruct.wd = withdrawals; send (s, &msgStruct, sizeof(msgStruct), 0); 직접 deposits, withdrawals 값 TCP 로 직접 전송 가능 send (s, &deposits, sizeof(deposits), 0); send (s, &withdrawals, sizeof(withdrawals), 0);

HANNAM UNIVERSITY 바이트 순서 (Byte Ordering)  가정 Deposits : 17,998,720 Withdrawals : 47,034,615  바이트 순서  msgStruct 코드에 의해 설명  Big-Endian : Motorola 68K, sparc  Little-Endian : Intel X86, DEC Alpha

HANNAM UNIVERSITY 바이트 순서 (Byte Ordering)  수신과 송신이 반대의 바이트 순서를 따르는 경우  17,998,720 -> -2,136,796,671  47,034,615 -> 139,408,126  표준 네트워크 바이트 순서 -> Big-Endian  htonl( ), ntohl( )  2 바이트, 4 바이트 정수를 원래의 값에서 네트워크 바이트 순서로 변환시켜주는 표준 함수들이 제공  4 바이트 값을 원래 바이트 순에서 네트워크 바이트 순서 로 변환  htons( ), ntohs( )  2 바이트 값을 네트워크 순서로 변환 후 반환

HANNAM UNIVERSITY 바이트 순서 (Byte Ordering) long int htonl (long int hostLong)// 4 바이트 값 -> 네트워크 바이트 순서 변환 Short int htons (short int hostShort)// 2 바이트 값 -> 네트워크 순서 변환 long int ntohl (long int netLong)// 네트워크값 -> 4 바이트 원래 값으로 Short int ntohs (short int netShort)// 네트워크값 -> 2 바이트 원래 값으로  여러 바이트의 이진값을 다른 장치로 보낼 때  hton * () 함수 필요  송신자를 위한 정확한 코드 (4byte 정수형 가정 ) msgStruct.dep = htonl (deposits); msgStruct.wd = htonl (withdreawals); send (s, &msgStruct, sizeof (msgStruct), 0);

HANNAM UNIVERSITY 정렬 (Alignment) 과 채워넣기 (Padding)  정렬 (alignment)  여러 개의 서로 다른 크기의 이진 - 부호화된 (binary-encoded) 필드들을 포함할 때 고려사항  가정  은행에서 예치 및 출금된 수 뿐 아니라 메시지가 예치 및 출금 트랜잭션 (transaction) 횟수를 포함  예치, 출금의 트랜잭션 수가 65,536 회를 넘지 않으면  2 바이트의 정수형 (unsigned short) 로 표현 가능

HANNAM UNIVERSITY 정렬 (Alignment) 과 채워넣기 (Padding) Struct { int centsDeposited; unsigned short short numbDeps; int centsWithdrawn; unsigned short numWds; } msgBuf; Send (s, &msgBuf, sizeof(msgBuf), 0);  Padding 에 의해 14 바이트 메시지 생성됨 # of withdrawalsCents withdrawn# of depositsCents deposited 2 bytes4 bytes2 bytes4 bytes

HANNAM UNIVERSITY 정렬 (Alignment) 과 채워넣기 (Padding)  주요사항  자료 구조들은 최대로 정렬  주소들이 가장 큰 원래 정수 크기로 나누어짐  다른 여러 바이트의 필드들은 크기에 따라 정렬  4 바이트 정수 주소  2 바이트 정수 주소 numWdsCents withdrawnnumDepsCents deposited[pad] 2 bytes4 bytes2 bytes4 bytes2 bytes numWds Cents withdrawnnumDeps Cents deposited 2 bytes 4 bytes2 bytes 4 bytes Struct { int centsDeposited; unsigned short short numbDeps; int centsWithdrawn; unsigned short numWds; } msgBuf;

HANNAM UNIVERSITY 틀짜기 (Framing) 및 파싱 (Parsing)  틀짜기 (Framing)  수신자가 메시지를 파싱 ( 메시지 시작과 끝을 구분하고 메시지 내 부 필드들의 경계를 판별 ) 할 수 있도록 정보 포맷  어플리케이션 프로토콜은 메시지 수신자가 전송된 메시지를 모 두 받았는지 결정할 수 있게 함  메시지 필드 – 고정 크기, 이미 알려진 크기로 가정  수신자 : 기대하고 있는 크기 만큼 바이트만을 버퍼에 저장  텍스트 - 스트링 (text-string) 표현법  TCP 소켓을 사용할 때는 어느 정도 수신 후  파싱을 위한 코드 구현 필요

HANNAM UNIVERSITY 틀짜기 (Framing) 및 파싱 (Parsing)  ReceiveMessage()  메시지 수신 후 파싱  길이 가 주어진 한계를 초과하지 않는 완전한 메시지 수신 후 버퍼에 저장한 후에 반환  에러 발생시 에러 - 탈출 (error-exit) 루틴 수행  버퍼에 저장된 메시지 길이 반환

HANNAM UNIVERSITY 틀짜기 (Framing) 및 파싱 (Parsing) # define DELIMCHAR ‘ ‘ # define FILEDSPERMSG 2 int ReceiveMessage (int s, char * buf, int maxLen) // 한번에 한 바이트 요구, { int received=0; int delimCount=0; int rv; while ((receivd < maxLen) && (delimCount < FIELDSPERMSG)) { rv = recv (s, buf+received, 1, 0); // recv 함수는 수신된 바이트 수를 반환, 오류발생시 – 1 반환 if ( rv < 0) DieWithError ( “ recv() failed ” ); else if (rv == 0) DieWithError ( “ unexpected end of transmission ” ); if ( * ( buf+received) == DELIMCHAR) delimCount += 1; received += 1; }

HANNAM UNIVERSITY 20 Q & A