'부스러기 > 네트워크' 카테고리의 다른 글
윈도우즈 소켓 프로그래밍 (0) | 2012.08.01 |
---|
윈도우즈 소켓 프로그래밍 (0) | 2012.08.01 |
---|
[윈도우즈 Socket함수]
- Winsock API는 개발자를 위한 헤더와 라이브러리 파일과 애플리케이션에서 사용하는 DLL파일로 구성됨.
- Winsock환경의 핵심은 소켓임....
[WSAStartup()]
- Winsock프로그램을 시작하기 위해서는 WSAStartup()함수를 호출해야함.
- 프로그램이 사용할 Winsock버전 정보를 운영체제에 전달하는 역할을 수행.
- int WSAStartup(WORD wVersion, LPWSDATA lpWSAData)
(1번째 파라미터: Winsock버전, 2번째 파라미터: Winsock라이브러리정보를 포함하는 구조체를 참조함.)
[WSACleanup()]
- Winsock라이브러리를 사용후 반드시 풀어주어야함.
- 프로그램에서 Winsock함수 사용을 종료한다는 신호만 전달함.
[Winsock함수]
서버 클라이언트
WSAStartup() WSAStartup()
WSASocket() WSASocket()
bind()
listen()
WSAAccept() <------------------ WSAConnect()
WSARecv() <------------------ WSASend()
WSASend() ------------------> WSARecv()
close() <----------------> close()
WSACleanup() WSACleanup()
[Winsock 넌블로킹 소켓함수]
- 원하지 않는 블로킹 현상을 예방하는 아주 간단하고 원칙적인 솔루션은 입출력 함수가 호출 되었을때 블록하지 않도록 설계된 소켓을 사용하는 목적
- 넌블로킹 소켓을 사용함으로써, 데이터를 수집하거나 전송할 소켓을 찾는데 사용할수도 있슴.
- ioctlsocket(SOCKET s, long cmd, u_long FAR* argp)
(s는 설정해야하는 소켓을, cmd는 소켓에서 수행할 동작을, argp는 커맨드 파라미터임.)
[WSAAsyncSelect()]
- 이벤트기반의 네트워크 소켓.
- 모니터링할 소켓과 소켓 이벤트가 발생할 때 해당창으로 전송할 원도우즈 메시지 값을 포함함.
- int WSAAsyncSelect(SOCKET s, HWND hWnd, unsigned int wMsg, long lEvent)
(s는 모니터링할 소켓을, hWnd는 이벤트 메시지를 수집할 부모창을 정의하며, wMsg는 전송할 실제 이벤트를 정의, lEvent는 소켓에서 모니터링할 이벤트를 정의함.)
* WSAAsyncSelect() 이벤트타입
이벤트 설명
FD_ACCEPT 소켓에 새로운 연결이 확립됨.
FD_ADDRESS_LIST_CHANGE 소켓의 프로토콜 유형에 대한 로컬 주소 리스트가 수정됨.
FD_CLOSE 기존의 연결이 종료됨.
FD_CONNECT 소켓이 원격 호스트와 연결을 확립함.
FD_GROUP_QOS 소켓 유형의 QoS값이 수정됨.
FD_OOB 소켓에서 대역 외(out-of-band) 데이터를 수집함.
FD_QOS 소켓의 QoS값이 수정됨.
FD_READ 소켓에 있는 데이터를 읽어들일 준비가 됨.
FD_ROUTING_INTERFACE_CHANGE 소켓의 라우팅 인터페이스가 특정목적에 대해서 수정됨.
FD_WRITE 소켓이 데이털르 출력할 준비가 됨.
[WSAEventSelect()]
- 윈도우즈 메시지를 통해서 소켓 통지를 처리하지 않고 대신 이벤트객체핸들을 통해 처리함.
- 여러 소켓이벤트를 처리하는데 각각에 대해서 별개의 윈도우즈 메서드를 생성하고 싶을때 사용..
- 먼저 WSACreateEvent()함수를 사용하여 고유의 이벤트를 정의해야함.
- WSASelect(SOCKET s, WSAEVENT hEvent, long lNetworkEvents)
(s는 모니터링할 소켓을, hEvent는 소켓 이벤트가 발생할 때 생성될 이벤트를 정의하며, lNetworkEvent는 모니터링할 모든 소켓이벤트의 비트와이즈 조합임.)
- 소켓 이벤트가 발생하면, WSACreateEvent()에서 지정한 이벤트 메서드가 실행됨.
[입출력오버랩(I/O)]
- 프로그램으로 하여금 독특한 데이터 구조(WSAOVERLAPPED)를 이용하여 한번에 한개 이상의 비동기 입출력 요청을 발생시킬 수 있도록 함.
- 소켓이 이벤트를 수집하면서 동시에 여러 개의 이벤트를 호출할 수 있기 때문에 이 이벤트들은 오버랩되는 것으로 간주됨.
- 이기법을 사용하기 위해서는 우선 오버랩이 가능하도록 설정된 플래그를 사용하여 WSASocket()함수로 소켓을 생성해야함.
- 64개의 이벤트로 한정하여 정의할 수 밖에 없기 때문에 대규모 네트워크 애플리케이션에는 적합하지 않음.
- 단일 스레드에서 처리됨...
[완료포트]
- 이벤트를 복수의 스레드로 나누어서 처리하기 위해 사용됨.....
- 각 프로세서에 대해서 별개의 스레드를 생성하므로써, 각 프로세서에서 복수의 소켓을 동시에 모니터링하는 것이 가능함.
출처:http://byung2love.blog.me/140020497881
[출처] 윈도우즈 소켓 프로그래밍|작성자 하얀방울
AJAX 사용시 다른 도메인 접근이 안될때 (IE 설정) (0) | 2014.02.16 |
---|