Winsock
Upcoming SlideShare
Loading in...5
×
 

Winsock

on

  • 176 views

 

Statistics

Views

Total Views
176
Views on SlideShare
174
Embed Views
2

Actions

Likes
0
Downloads
0
Comments
0

1 Embed 2

http://www.slideee.com 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Winsock Winsock Presentation Transcript

  • Winsock
  • winsock  Windows Socket API의 줄임말로, 윈도 운영체제 기반의 네트워크 프로그램을 개발하기 위한 기술 요소들이 적용된 개발 도구  BSD socket을 기반으로 하고 있어서 리눅스 환경과 유사
  • BSD Socket과의 차이점  BSD Socket API의 거의 전부를 그대로 사용할 수 있다.  dll 로드 : winsock.dll을 로딩해야 한다.  소켓 지정 번호 : 리눅스는 소켓 지정 번호가 곧 파일 지정 번호로 자료형은 signed int이다. 윈속은 소켓을 가리키기 위해서 SOCKET을 사용하는데, unsigned int 형이다. 그러므로 포팅 작업을 쉽게 하기 위해서 int형dmf 사용해도 큰 문제는 없다. 대신 컴파일러의 종류에 따라서 warining message를 출력할 수도 있다. 가능하면 SOCKET 자료형을 그대로 사용하는 것이 좋다.
  • TCP  상위계층  메시지나 파일들을 좀더 작은 패킷으로 나누어 인터넷을 통해 전송하는 일을 담당  수신된 패킷들을 원래의 메시지로 재조립하는 일을 담당
  • IP  하위계층  각 패킷의 주소 부분을 처리함으로써, 패킷들이 목적지에 정확하게 도달할 수 있게 한다.
  • TCP/IP  네트워크 상의 각 게이트웨이는 메시지를 어느 곳으로 전달해야 할지를 알기 위해, 메시지의 주소를 확인한다.  한 메시지가 여러 개의 패킷으로 나뉘어진 경우 각 패킷들은 서로 다른 경로를 통해 전달될 수 있으 며, 그것들은 최종 목적지에서 재조립된다.  client / server 모델을 사용하는데, client의 요구에 대응하여 네트워크 상의 server가 웹 페이지를 보내는 식의 서비스를 제공한다.  connectionless(네트워크를 독점하지 않으므로 모든 사람들이 그 경로를 공동을 사용할 수 있다.)
  • socket  인터넷 상에서 물리적으로 떨어져있는 소프트웨어와 소프트웨어 간의 통신을 담당하는 „소프트웨어 통신 도구„  인터넷의 종단에 위치하면서 소프트웨어와 소프트웨어를 연결한다.
  • socket 예시 Firefox socket Apache socketInternet
  • socket 예시  socke은 clien인 firefox와 serve인 apache가 서로 통신할 수 있게 연결한다.  socket을 이용하여 firefox는 apache서버로 웹페이지 요청을 하고, apache serve는 요청을 분석 해서 웹페이지를 firefox에 전송한다.
  • 유닉스 socket 자료형  유닉스는 모든 자월을 파일로 다룬다.  socket 역시 예외는 아니다.  모든 파일 관련 함수는 signed int형의 파일 지정 번호를 이용해서 파일을 제어한다.  BSD socket도 int형의 파일 지정 번호를 이용해서 socke을 다룬다.
  • 윈도우 socket 자료형  windows는 자월을 파일이 아닌 각각의 독립된 커널 객체로 본다.  파일 지정 번호가 아닌 HANDLE을 이용해서 제어한다.  객체의 인스턴스를 다루는 방식이다.  windows의 특성상 socket 역시 socket HANDLE로 다루어야 하겠지만, BSD 소켓과의 호환을 유재 하기 위해서 unsigned int를 재정의한 (소켓 지정 번호) SOCK으로 소켓을 다룬다.  socket을 지시하기 때문에 socket 지시자라고 부른다.  기본적으로 windows는 file과 socket을 다른 객체로 본다.
  • winsock 초기화 int WSAStartup { // winsock 초기화 함수 WORD wVersionRequested, // 프로그램이 요구하는 최상위 윈속 버전 LPWSADATA lpWSAData // WSADATA 타입 변수의 주소를 전달 }; // 이를 통해 시스템에서 제공하는 윈속 구현에 대한 세부사항을 // 얻을 수 있다. int WSACleanup(void); // 윈속 사용을 중지함을 운영체제에 알리고 관련 리소스를 // 반환한다.
  • winsock 초기화 예제 코드 #include <winsock2.h> int main(int argc, char * argv[]) { // 윈속 초기화 WSADATA wsa; if ( 0 != WSAstartup(MAKEWORD(2,2), &wsa)) // WSAstartup 함수는 성공 시 0 return -1; MessageBox(NULL, “윈속 초기화 성공”, “성공“, MB_OK); // 윈속 종료 WSACleanup(); return 0; }
  • 소켓 생성  socket() 함수는 사용자가 요청한 프로토콜을 이용하여 통신을 할 수 있도록 내부적으로 리소스를 할당하고, 이를 접근할 수 있는 일종의 핸들값(SOCKET타입, 32비트 정수 )을 리턴한다.  이 값을 소켓 디스크립터(socket descriptor)라 부르며, 각종 소켓 함수를 호출할 때 인자로 전달하 여 사용하게 된다. SOCKET socket { int af, // 주소 체계를 지정한다. int type, // 소켓 타입을 지정한다. int protocol // 사용할 프로토콜을 지정한다. };
  • TCP를 사용하고자 한다면?  주소 체계는 AF_INET  소켓 타입은 SOCK_STREAM  프로토콜은 IPPROTO_TCP 혹은 0도 가능하다.
  • 소켓 닫기  소켓을 이용한 통신이 끝나면 관련 리소스를 반환해야 한다. int closesocket() { SOCKET s };
  • 소켓 생성과 닫기 예제 코드 #include <stdio.h> #include <winsock2.h> int main(int argc, char * argv[]) { WSADATA wsa; // 윈속 초기화 if (0 != WSAStartup(MAKEWORD(2,2,), &wsa)) return -1; printf(“윈속 초기화 성공n”); // socket() SOCKET tcp_socket = socket(AF_INET, SOCK_STREAM, 0); if(tcp_sck == INVALID_SOCKET) printf(“소켓 생성 실패”); printf(“소켓 생성 성공”); // closesocket() closesocket(tcp_socket); WSACleanup(); return 0; }