Download presentation
Presentation is loading. Please wait.
1
UDP Test 프로그램 분석
2
프로젝트 구조 udptestDlg.cpp : implementation file
udptest.cpp : Defines the class behaviors for the application. udptest.h : main header file for the UDPTEST application udptestDlg.h : header file stdafx.h : include file for standard system include files
3
UI
4
C++ - View는 상태바, 메뉴, 작업줄등을 뺀부분을 제어 - main fram은 view이외에 부분을 제어 - doc은 Data처리
5
UI DoDataExchange(), OnPaint() 메쏘드를 이용해 UI를 완성시켰다.
이프로그램의 UI는 CDialog 클래스를 이용해서 만들었다. Cdialog는 기본적인 윈도우 프로그램 창을 만들어 주며 DoDataExchange(), OnPaint() 메쏘드를 이용해 UI를 완성시켰다. 완성된 UI에 MESSAGE_MAP() 메쏘드를 이용하여 특정 이벤트에 적절한 동작을 하도록 설계가 되어있다. 또한 Thread를 생성시켜 UDP통신을 한다.
6
UI - DoDataExchange() => View 생성 Method(Text, Check Box) DDX_Control - 리스트 상자, 콤보 상자, 에디트 상자, 각종 컨트롤 아이템을 연결시킴. DDX_Text - Cstring, int, LONG과 같은 변수를 연결해 컨트롤할 때 사용. DDX_Check - int 또는 BOOL 변수를 연결해 컨트롤을 사용. DDX_Radio - 라디오 버튼을 변수와 연결시킬 때 사용. AfxMessageBox() – 단순 메시지 출력 Ex ) Afx(MessageBox(“안녕”, 옵션);
7
UI - MESSAGE_MAP() => 이벤트 핸들링 메쏘드 DECLARE_MESSAGE_MAP() // 선언
BEGIN_MESSAGE_MAP // 시작 ON_BN_CLICKED // 클릭시 이벤트 발생 END_MESSAGE_MAP // 종료 OnPaint() => 아이콘 삽입 메쏘드 CPaintDC dc(this); // device context for painting dc.DrawIcon(x, y, m_hIcon); // Draw the icon
8
UDP Protocol이란? User Datagram Protocol의 약자로 전송계층에서 제공해야할
최소한의 서비스만 제공하는 전송 프로토콜. 특징 : 1. 비연결형 (Port만 확인하여 소켓을 식별하고 송수신) 2. 패킷 오버헤드가 적어 네트워크 부하 감소 비 신뢰성 4. 오류검출(헤더에 오류 검출 필드 포함)
9
UDP 프로그래밍 절차
10
Struct sockaddr 구조체 winsock2.h 에 정의 되어 있다. #define AF_INET 2 // internetwork : UDP, TCP, etc.. struct sockaddr{ sa_family_t sa_family; // 소켓의 주소체계. PF_INET= IPv4 주소체계. char sa_data[14]; // 해당 주소체계에서 사용하는 주소 정보. } struct sockaddr_in{ sin_family_t sin_family; // IPv4 주소체계에서 사용하므로 항상 AF_INET으로 설정 unist16_t sin_port; // 포트 번호 struct in_addr sin_addr; // IP주소를 나타내는 32비트 정수 타입 구조체 char sin_zero[8]; // sockaddr과 같은 크기를 유지하기 위해 필요한 패딩(padding) 공간. 항상 0.
11
Winsock 초기화 및 종료 소켓 API를 호출하기 전에 반드시 윈속 초기화를 해야한다
WSAStartup(wVersionRequested, IpWSAData) // 프로그램에서 사용할 윈속 버전 요청 wVersionRequested = 프로그램이 요구하는 윈속 버전 Ex ) 윈속 3.2버전 요청시 MAKEWORD(3,2) IpWSAData = 시스템에서 제공하는 윈속 구현에 대한 세부 사항 - WSACleanup() // 윈속 종료
12
OnSendmessage() 소켓을 생성하고 데이터를 보내는 메쏘드 Receive 또한 절차는 유사하므로 생략
13
OnSendmessage() // 소켓 생성 sock = socket( AF_INET, SOCK_DGRAM, 0 ); AF_INET >> 인터넷 프로토콜 체계 SOCK_DGRAM >> 데이터그램 방식
14
OnSendmessage() - Sockaddr 세팅 addrReceiver.sin_family = AF_INET; // 바이트 순서 변환 addrReceiver.sin_port = htons( m_PORTNUM ); // Host ip address addrSender.sin_addr.s_addr =inet_addr(" ");
15
OnSendmessage() - bind 호출
bind(sock, (struct sockaddr )&addrReceiver, sizeof(addrReceiver)); (Struct sockaddr *) & addrReceiver >> 서버 소켓주소 구조체 포인터 Send data memcpy(sendbuf,&sendprotocol,sizeof(sendprotocol)); - Data Send sendto( sock, sendbuf, sendDataLength, 0, ( SOCKADDR * )&addrSender, sizeof( SOCKADDR ) )
16
Thread Thread란 프로세스 안에서 실제 실행의 단위 MFC에서 스레드를 생성하는 함수는 AfxBeginThread로 특정 전역 함수를 별도의 스레드 단위로 실행이 가능하다. CWinThread* pThead= AfxBeginThread(TheadReceive,&threadInfo); CWinThread* pThead1= AfxBeginThread(TheadSend_CPU1,&threadInfo); CWinThread* pThead2= AfxBeginThread(TheadReceive_Ras,&threadInfo);
Similar presentations