Window socket programming

Slides:



Advertisements
Similar presentations
학과 : 컴퓨터 시물레이션 학번 : , 학년 : 4 학년 성명 : 박현호, 배기택 C 를 이용한 네트워크 타자 게임.
Advertisements

Lynx, Opera, and Other Browsers 인공지능연구실. Contents Lynx (Text 기반의 Browser) 역사 및 특징 사용법 및 기능 Opera (Small Browser) 역사 및 특징 사용법 및 기능 과 뉴스 그룹 사용법 Other.
Python Socket/HTTP overmania. 목표  소켓을 이용하여 기본적인 서버 - 클라이언트 모델을 구현할 수 있다.  간단한 웹서버를 소켓을 이용하여 작성할 수 있다.
미디어 프로그래밍 II 소개.
TCP 서버/클라이언트 동작 원리 - (1) TCP 서버/클라이언트 예 웹 서버 웹 클라이언트 웹 클라이언트
2장. 윈도우즈 입출력 1/211 1.
윈도우 운영체제와 윈도우 응용 프로그램의 특징을 이해한다.
WSAAsync Select 김대열 Bit - Academy Sunmoon University, Korea.
제1장 윈도우 프로그래밍 1.1 윈도우 프로그래밍의 개념 1.2 윈도우 프로그램의 기본 구조
TCP/IP 네트워크 제 26 장 Telnet과 Rlogin 정보통신연구실.
Chapter 09. 소켓 입출력 모델(I).
Understanding of Socket and File I/O
다이얼로그 박스와 컨트롤 컴퓨터 계측 및 실습.
Chapter 06. UDP 서버/클라이언트.
고급 컴퓨터 프로그래밍 팀명:지식인 팀원:홍광수 원대연 이소정.
TCP/IP Socket Cover Slide 조태문.
오목게임 W32 로봇시스템제어(하) GROUP 7 노성동, 하선웅, 김관준
TCP/IP 소켓 프로그래밍 - C 버전 중에서
4장. 소켓 유형과 프로토콜 Network Lab. 이 원 구 1.
PHP 웹 프로그래밍 (PHP Web Programming) 네트워크 프로그래밍 문양세 강원대학교 IT대학 컴퓨터과학전공.
TCP/IP Socket Cover Slide 조태문.
누구나 쉽게 즐기는 C언어 콘서트 한남대학교 컴퓨터공학과 이 재 광 교수.
Department of Computer Engineering
Kasimov C언어 세미나 1st.
TCP Client/Server Program
Network Lab. Seoung Hyeon, Lee
Internet Address Conversion Functions
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
인터넷 주소 변환 School of Electronics and Information. Kyung Hee University.
JAVA 프로그래밍 12장 네트워킹(Networking).
제1강 : 정보처리기능사 필기 - 지피지기 백전백승.
Choi Seong Yun 네트워크 프로그래밍 Choi Seong Yun
Department of Computer Engineering
Network Socket Programming
Chapter 02. 윈도우 소켓 시작하기.
Visual C++ Programming
※ POSCO기술연구원 ID를 가지고 있지 않는 경우
(Web Programming & Practice)
Department of Computer Engineering
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
Chapter 8 연결형 프로토콜 서버 발표자 : SE Lab 황 성 하
Department of Computer Engineering
Advanced Socket Programming
쪽지 전송 프로그램 - 최종보고 장승수 최희진 오민영.
2012 인터넷 응용프로그래밍 FTP, MySQL 사용 방법 및 텀 프로젝트용 서버에서 웹페이지 구동 방법 설명
7장. UDP 서버-클라이언트 UDP 서버-클라이언트의 기본 구조와 동작 원리를 이해한다.
날짜: 팀명: TEAM-SIX 발표자: 이기영
Chapter 09. 소켓 입출력 모델(I).
네트워크와 소켓 프로그래밍 Chapter 01. * 학습목표 TCP/IP 프로토콜의 동작 원리를 개관 소켓의 기본 개념을 이해
Packet Analyzer V (주) 이네스 닷컴.
WSAAsync Select 김대열 Bit - Academy Sunmoon University, Korea.
Internet 데이터 전송 목표: 인터넷의 개요 및 기본 내용을 살펴보고 VB에서의 데이터 전송 프로그래밍에 대하여 학습한다. 주요내용 인터넷의 개요 인터넷 데이터 전송 인터넷 프로그래밍 Winsock Client Server 프로그래밍.
Linux/UNIX Programming
Chapter 16 Socket Interface.
Department of Computer Engineering
윤성우의 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 열혈강의 TCP/IP 소켓 프로그래밍 개정판
나는 땅에서 키는 작지만 하늘로부터 재는 키는 이 세상 어느 누구보다도 크다

Remote Control Plus - 졸업 프로젝트 배문희.
Department of Computer Engineering
의학도서관 기록물 보존 사업 원내 로 대용량 파일 첨부방법
MONSTER CAR 구정재 한석우 김재형.
C언어 개론.
Chapter 02. 윈도우 소켓 시작하기.
제 14 장 응용 계층과 클라이언트-서버 모델 클라이언트-서버 모델 14.2 동시성 14.3 프로세스 14.4 요약.
매물장 로그인 직원을 미리 생성하시면 직원 ID로 로그인 가능.
실시간 음성 채팅 서비스 (Voice Chatting Programe)
Linux/UNIX Programming
Department of Computer Engineering
네트워크 프로토콜.
Presentation transcript:

Window socket programming 네트워크 프로그래밍 강좌

윈도우 소켓 프로그램 Winsock 프로그램의 특징 Win32 console 응용 Win32 응용 MFC 사용 Microsoft 윈도우 운영 체제에서 제공하는 TCP/IP 프로그래밍을 위한 API 기본 동작 및 사용 방법이 BSD 소켓과 유사 Win32 console 응용 유닉스용 소켓 프로그램을 윈도우 환경에서 실행하는 경우에 사용 즉, 유닉스용 소스를 그대로 이용하되 실행 환경만 PC 윈도우로 바꿀 때 필요 --> DOS 스타일 프로그램 Win32 응용 윈도우의 GUI를 이용하는 프로그램 작성 사용자 윈도우를 만들고 소켓 응용 프로그램이 사용자 윈도우와 메시지를 주고 받는 방식으로 작성 --> SDK를 이용하는 프로그램 MFC 사용 Microsoft사에서 제공하는 소켓 클래스를 이용하는 프로그래밍 네트워크 프로그래밍 강좌

윈도우 소켓 프로그램 유닉스 소켓 프로그래밍 : 서버용 프로그램 작성에 주로 사용  라우팅, 네트워크 관리 등이 Unix 컴퓨터에서 주로 실행되므로 Winsock 프로그램 : 다양한 GUI가 필요한 PC영 클라이언트 프로그램에 주로 사용됨 Java 소켓 프로그래밍 : 위의 두 방식처럼 운영 체제에 종속적이 아니라서 임의의 플랫폼에서 실행 가능, 또한 GUI도 편리하게 작성 가능 네트워크 프로그래밍 강좌

Winsock 프로그램 실행 환경 Win32 console 응용 형태로 실행하는 방법 유닉스용 소켓 프로그램과 다른 점 헤더 파일 변경 #include <windows.h> #include <Winsock.h> socket() 시스템 콜 호출 전에 반드시 WSAStartup() 함수를 호출하여 Winsock.dll을 구동해 두어야 함 Winsock.dll은 Winsock API의 각종 기능을 제공하는 라이브러리임 소켓을 닫을 때 close()가 아니라 closesocket() 함수를 사용 Winsock의 사용이 모두 종료되면 WSACleanup() 함수를 호출하여 Winsock.dll 사용의 종료를 알려주어야 함 WSAStartup()에서 필요로 하는 두개의 인자 응용 프로그램이 요구하는 최소의 Winsock 버전 값 시스템이 Winsock 관련 정보를 알려주는데 사용할 WSADATA 타입의 구조체 네트워크 프로그래밍 강좌

Winsock 프로그램 실행 환경 WSAStartup()을 호출하는 코드 WSADATA 구조체의 정의 : page 143 참조 WORD version = MAKEWORD(1,1) WSADATA wsadata; WSAStartup(version, &wsadata); WSADATA 구조체의 정의 : page 143 참조 Winsock, 프로그램 컴파일 : wsock32.lib 필요 Visual-C 6.0을 사용하는 경우 Project-Settings-Link 메뉴의 Library module 끝 부분에 wsock32.lib를 추가 네트워크 프로그래밍 강좌

Winsock의 동작 모드 Blocking mode Non-blocking mode Multitasking이 지원되는 Unix에서는 문제 없음 UNIX와 달리 윈도우 3.1 이하에서는 멀티태스킹을 지원하지 않음 이 경우 blocking mode 사용하면 PC 전체가 block 될 수 있음 Non-blocking mode 함수 호출이 즉시 반환 성공적인 리턴 에러 리턴 : 함수 수행중 에러가 발생했거나 함수가 block WSAEWOULDBLOCK : 에러가 아니라 함수가 동작 완료할 때 까지 기다리면 block될 수 있음을 알리는 것 Winsock.dll이 함수가 원하는 동작을 시작했으나 아직 종료되지 않았음 함수의 동작이 시작되지 못했으며 다시 재 시도를 필요로 함 네트워크 프로그래밍 강좌

Winsock의 동작 모드 Asynchronous mode(비동기) 첫번째 경우 : 응용 프로그램이 함수의 동작 완료 시점을 알아서 그 결과를 처리하여야 함 두번째 경우 : 응용 프로그램이 이 함수가 성공적으로 시작할 때 까지 반복 호출 Asynchronous mode(비동기) 함수의 동작이 완료되면 그 때 Winsock.dll이 메시지를 통하여 동작의 완료를 알려주거나 함수의 동작이 시작하지 못했으면 함수를 다시 호출해야 할 시점을 나중에 비동기 적으로 알려주겠음 윈도우 프로그램에서 윈도우는 objects라고 볼 수 있으며 객체간의 통신은 메시지를 서로 전달함으로써 이루어짐. 비 동기 모드의 Winsock 프로그램은 이러한 윈도우 객체간의 비동기적인 메시지 전달 방식을 이용 Blocking 함수 : 함수 자체의 특성상 블록될 수 있는 함수 네트웍 시스템이(TCP/IP) 어떤 정보를 얻어내야만 그 결과를 반환할 수 있고 이 정보를 얻는데 시간이 걸리는 함수 네트워크 프로그래밍 강좌

Winsock의 동작 모드 네트워크 프로그래밍 강좌

Winsock의 동작 모드 Winsock에서는 Blocking 함수와 같은 기능을 수행하면서 실제로는 비동기 모드로 동작하는 즉, 함수 실행 결과를 비동기적으로 알려주는 비동기 함수들을 제공 네트워크 프로그래밍 강좌

Winsock의 시작과 종료 WSAStartup() WSACleanup() Winsock library인 Winsock.dll을 초기화 일반적으로 윈도우 메시지 WM_CREAT나 WM_INITDIALOG의 처리 부분에서 호출됨 필요로하는 인자 응용 프로그램이 요구하는 최소의 Winsock 버전(1.0 혹은 1.1) 함수가 수행된 후 네트웍 시스템(Winsock.dll)이 Winsock 관련 정보를 알려주는데 사용할 Winsock 정보 구조체 즉, WSADATA 구조체 변수의 주소 WSAStartup()을 호출하는 예 WSACleanup() Winsock의 사용을 종료할 때 호출 네트워크 프로그래밍 강좌

Winsock의 시작과 종료 네트워크 프로그래밍 강좌

Winsock의 동작 함수의 호출 순서와 인자, 결과 리턴 값 : BSD 소켓의 사용법과 거의 유사 Socket() WSAGetLastError() : 가장 최근에 발생한 Winsock 관련 함수의 에러 코드를 반환 네트워크 프로그래밍 강좌

Winsock의 동작 MessageBox() : 메시지 상자를 만들어 화면에 출력하는 윈도우 함수 int MesageBox( HWND : 윈도우 핸들 type이며 주로 int LPCTSTR : long pointer const char string int MesageBox( HWND hWnd, /*윈도우 핸들 */ LPCTSTR lpText, /* 텍스트배열주소 */ LPCTSTR lpCaption, /* 캡션배열주소 */ UINT uType); /* Box style */ 네트워크 프로그래밍 강좌

Winsock의 동작 bind() 네트워크 프로그래밍 강좌

Winsock의 동작 listen() : 수동 모드로 설정 accept() 네트워크 프로그래밍 강좌

Winsock의 동작 connect() 네트워크 프로그래밍 강좌

Winsock의 동작 closesocket() : 사용이 끝난 소켓을 닫기 위해 사용 setsocket() : 개설된 소켓의 동작에 관한 각종 option을 지정하는데 사용 네트워크 프로그래밍 강좌

비동기 모드의 사용 윈도우(특히 버전 3.1)는 multi-tasking이 지원되지 않는 운영체제이므로 어떤 호출이 블록되어 있으면 시스템 전체가 멈춤 소켓을 비동기 모드로 바꾸는 것이 필요 WSAAsyncSelect()를 사용 소켓은 자동으로 비동기 모드로 바뀌고 블록될 수 있는 함수들은 비동기 보드로 처리 : accept(), send(), receive() 등 네트워크 프로그래밍 강좌

비동기 모드의 사용 WSAAsyncSelect()의 반환 값 즉시 반환되며 에러 발생시에는 SOCKET_ERROR를 반환 에러 발생하는 경우 Winsock.dll이 초기화되지 않았거나 네트웍이 동작하지 않거나 다른 blocking 함수가 처리 중이거나 함수의 인자를 잘 못 입력한 경우 에러없이 반환하는 경우 소켓이 비동기 모드로 됨 원하는 이벤트가 발생하면 그 사실이 메시지로 전달될 것임 이 소켓에 accept()가 호출되어 새로운 소켓이 만들어지면 그 소켓도 WSAAsyncSelect() 호출 시 요구한 이벤트를 똑 같이 처리 프로그램이 관심을 갖는 이벤트 즉, 알고싶은 소켓의 상태 변화는 WSAAsyncSelect() 호출 시 IEvent 인자에 지정할 수 있음 네트워크 프로그래밍 강좌

비동기 모드의 사용 WSAAsyncSelect()에서 다루는 이벤트 종류 FD_OOB : 수신측에 도착한 모든 패킷이 순서대로 처리되는데 반해 OOB 데이터는 이 순서를 무시하고 우선적으로 처리됨 ‘Ctrl-C’ 같은 제어문자를 전달하는데 사용됨 네트워크 프로그래밍 강좌

비동기 모드의 사용 이전에 지정한 WSAAsyncSelect()의 각종 옵션을 취소하여 어떤 이벤트 발생에 대한 메시지를 수신하고 싶지 않으면 --> wMsg=0, IEvent=0으로 하여 WSAAsyncSelec()를 다시 호출 소켓 m_s로 클라이언트의 접속 요청 connect()가 접수되어 FD_ACCEPT 이벤트가 발생하면 사용자 메시지(WM_USER+1)를 보내도록 하는 예 WSAAsyncSelect(m_s, m_hWnd, WM_USER+1, FD_ACCEPT) 이벤트의 종류를 알기위하여 IParm를 참조하여야 함 IParm의 하위 16비트 : 발생한 이벤트의 종류가 실려있음 IParm의 상위 16비트 : 에러 코드가 실려있음 네트워크 프로그래밍 강좌

비동기 모드의 사용 네트워크 프로그래밍 강좌

Winsock의 IP 주소 변환 함수 WSAAsyncGetHostByAddr() : hostent 구조체를 반환 네트워크 프로그래밍 강좌

Winsock의 IP 주소 변환 함수 IP 주소가 203.252.65.3인 호스트의 도메인 네임을 메시지 박스에 출력하는 예제 프로그램 네트워크 프로그래밍 강좌

Winsock의 IP 주소 변환 함수 WSAAsyncGetServByName() ftp, mail과 같은 TCP/IP 표준 응용 프로그램의 포트 번호를 찾기 위해 사용되는 비동기 함수 성공적 수행 시 servent라는 구조체의 포인터를 반환 네트워크 프로그래밍 강좌

Winsock의 IP 주소 변환 함수 UDP 프로토콜로 구현된 time 서비스의 포트 번호를 찾아내어 화면에 출력하는 예 네트워크 프로그래밍 강좌

Winsock의 IP 주소 변환 함수 WSAAsyncGetHostByName() 네트워크 프로그래밍 강좌

Winsock 채팅 서버 PC에서 Winsock을 사용한 채팅 서버 구현 네트워크 프로그래밍 강좌

프로그램 주요 부분 헤더 파일 전역 변수 Server.h : 화면 구성 정보를 가지고 있는 리소스 파일 Windows.h : 원도우 응용 프로그램의 master 헤더 파일 Winsock.h : winsock 관련 상수 및 함수 선언 전역 변수 네트워크 프로그래밍 강좌

프로그램 주요 부분 WinMain() 함수 DialogueBox를 메인 원도우로 사용 CreateDialog() : 대화 상자를 생성 GetMessage() : 대화상자에 도착하는 메시지를 받아 이를 처리 네트워크 프로그래밍 강좌

프로그램 주요 부분 메시지 처리 메시지의 처리는 HandleDialog() 함수에서 처리 WM_INITDIALOG : DialogBox 생성 시 발생, 이메시지 발생하면 전역 변수들과 Winsock을 초기화하고 클라이언트의 연결 요청을 기다리기 위해 InitSocket()을 수행 InitSocket() 함수에서는 WSAStartup() 시스템 콜을 호출하여 Winsock.dll을 초기화 WM_COMMAND : 메뉴, 리스트박스, 버튼, 체크박스등에서 발생하며 사용자가 종료버튼을 클릭할 때만 발생 wParm은 이러한 여러 종류의 메시지를 구분하는 파라미터이고 , IDC_EXIT는 종료 버튼 ID임 WM_DESTROY : 윈도우가 종료될때 내부적으로 발생 WM_ASYNC : 소켓을 통하여 데이터를 비동기 모드로 처리하는데 사용 메시지의 처리는 HandleDialog() 함수에서 처리 네트워크 프로그래밍 강좌

프로그램 주요 부분 네트워크 프로그래밍 강좌

프로그램 주요 부분 WM_INITDIALOG 및 WM_COMMAND의 처리 네트워크 프로그래밍 강좌

프로그램 주요 부분 WM_DESTROY의 처리 DestroyWindow()에 의해 윈도우에서 내부적으로 발생되는 메시지 PostQuitMessage()는 윈도우 메시지 큐에 종료 메시지를 전송하는 함수 네트워크 프로그래밍 강좌

프로그램 주요 부분 WM_ASYNC의 처리 비동기 모드로 호출할 소켓 Accept()를 비동기적으로 처리 : 초기화 소켓인 m_sAccept 각 클라이언트들과 채팅 메시지를 비동기적으로 송수신 : m_sClient[] WSAAsyncSelect(m_sAccept,m_hWnd,WM_ASYNC,FD_ACCEPT) M_hWnd : FD_ACCEPT 이벤트 발생 시 메시지를 받을 윈도우 핸들 WM_ASYNC : 전송할 메시지 네트워크 프로그래밍 강좌

프로그램 주요 부분 WM_ASYNC 메시지 발생 시 어느 소켓이 이 메시지를 발생시켰는지 확인하는 프로그램 네트워크 프로그래밍 강좌

프로그램 주요 부분 데이터 송수신 WM_ASYNC 발생 시 소켓에서 발생한 이벤트의 구체적인 내용인 IParm 파라미너에 있음 네트워크 프로그래밍 강좌

프로그램 주요 부분 네트워크 프로그래밍 강좌

Wchat_Server.c 프로그램 리스트 네트워크 프로그래밍 강좌

Wchat_Server.c 프로그램 리스트 네트워크 프로그래밍 강좌

Wchat_Server.c 프로그램 리스트 네트워크 프로그래밍 강좌

Winsock 채팅 클라이언트 사용자가 키보드에서 입력한 문자열을 서버에 전송하고, 서버가 보내온 메시지를 화면에 출력하는 프로그램 네트워크 프로그래밍 강좌

프로그램 주요부분 설명 헤더 파일과 전역 변수 네트워크 프로그래밍 강좌

프로그램 주요부분 설명 WM_INITDISLOG의 처리 Winsock의 초기화(InitSocket())와 에디트 컨트롤 서브클래싱(subclassing)을 수행 네트워크 프로그래밍 강좌

프로그램 주요부분 설명 Subclassing 클라이언트 프로그램 : DialogBox로부터 실행이 시작, 에디트컨트롤(edit control)을 통하여 데이터를 입력 받음 에디트컨트롤에서는 사용자가 리턴(‘\n’)까지 입력한 문자를 받아, 사용자 정의 메시지인 WM_ASYNC를 이용하여 처리하며 이를 위하여 subclassing을 이용 Subclassing은 윈도우에서 수행되던 프로시져를 사용자 정의 프로시져로 연결하여 원하는 작업을 하다가 그 작업이 완료되면 다시 원래의 프로시져로 되돌아 오는 기능을 의미 현재의 프로시져를 OldProc로 잠시 저장하고 사용자 프로시져인 EditProc를 등록하는 예제 OldProc = (WNDPROC) SetWindowLong(GetDlgItem(hWnd,IDC_EDIT), GWL_WNDPROC,(LONG)EditProc); IDC_EDIT : edit control의 ID EditProc : edit control을 처리하기 위해 새로 정의된 프로시져 이름 네트워크 프로그래밍 강좌

프로그램 주요부분 설명 WM_CHAR 메시지 처리 EditProc의 구현 내용 : 사용자가 키보드로 입력하였을 때 발생하는 메시지 WM_CHAR를 처리 네트워크 프로그래밍 강좌

프로그램 주요부분 설명 WM_COMMAND의 처리 “종료” 버튼이 눌릴때 발생하는 메시지로 소켓을 종료하기 위하여 WSACleanup()을 호출하고 윈도우에 종료 메시지 WM_DESTROY를 보내기 위하여 DestroyWindow() 함수를 호출 네트워크 프로그래밍 강좌

프로그램 주요부분 설명 WM_DESTROY의 처리 WM_ASYNC의 처리 DestroyWindow()에 의해 윈도우 내부적으로 발생, 윈도우 종료 시 사용 WM_ASYNC의 처리 네트워크 프로그래밍 강좌

WChat_Client.c 프로그램 리스트 네트워크 프로그래밍 강좌

WChat_Client.c 프로그램 리스트 네트워크 프로그래밍 강좌

WChat_Client.c 프로그램 리스트 네트워크 프로그래밍 강좌