본문 바로가기

Computer

소켓 I/O :: WSAEventSelect - 메시지를 전달하는 대신 이벤트 신호를 이용 - 원형 : int WSAAPI WSAEventSelect( SOCKET s, WSAEVENT hEvent, long lEvent ) - 이벤트 메시지 핸들은 Accept시 CreateEvent 함수 호출로 생성한다. - 이벤트 발생 유무의 확인은 WSAWaitForMultipleObject 함수로 처리 - 네트웍 이벤트 종류는 WSAEnumNetworEvents 함수로 처리 더보기
소켓 I/O :: WSAAsyncSelect - 소켓을 비동기화 한다. - 윈도우를 하나 생성하여 메시지 큐를 이용하여 소켓 이벤트 발생 - 싱글 스레드 : 하나의 메시지가 완료될 때까지 다른 메시지 사용불가 - 원형 : int PASCAL WSAAsyncSelect( SOCKET s, HWND hWnd, u_int wMsg, long lEvent ); 더보기
소켓 I/O :: Select 1. 해당 소켓 세트를 검사하여 읽기/쓰기가 필요한 사항을 처리 2. Winsock 1.1 버전에서 정의 - 버클리 소켓과 후위 호환성을 지님 - 유닉스 계열에 바로 이식가능 3. Select 함수 호출 과정 4. Select 함수 원형 int select( int nfds, fd_set FAR* readfds, fd_set FAR* writefds, fd_set FAR* exceptfds, const struct timeval FAR* timeout ) 5. FD(파일디스크립터) - File Handle - 리눅스에서 사용되던 파일 관리 기법 - 파일에 정수를 지정하여 관리하는 방식 - 소켓도 파일로 인식 - 윈도우에서는 handle로 사용 - FD_ZERO, FD_SET, FD_ISSET, FD_CL.. 더보기
다중 접속 서버(I/O 멀티플렉싱) 1. I/O 멀티플렉싱 - 서버-클라이언트 1:N 매칭 - 입력 신호를 대기하여 해당 신호에 대한 처리를 한다. - I/O를 하나로 묶어 처리한다. 2. 윈도우 소켓 I/O 모델 - select - WSAAyncSelect - WSAEvent - Overlapped - Completion Port 더보기
데이터 전송과 수신 1. 전송(send) - int send(SOCKET s, const char FAR* buf, int len, int flags) - 해당 소켓으로 직접 정보 전송 2. 수신(recv) - int recv(SOCKET s, char FAR* buf, int len, int flags) - 해당 소켓에서 버퍼에 수신 받은 데이터 저장 - 전송된 데이터의 길이가 0이면 접속 종료됨. 더보기
클라이언트 연결 과정(TCP) 1. 소켓 생성 (socket) - 소켓 옵션을 주서 소켓 생성 2. 연결 (connect) - 주소 정보 구조체(sock_addr)에 연결 할 주소 정보 저장 - 연결 요청(동기/비동기) 더보기
서버 연결 과정(TCP) 1. 소켓 생성(socket) - 소켓 옵션을 주서 소켓 생성 2. 주소 정보 연결(bind) - 주소 정보 구조체(sock_addr)에 자신의 주소 정보 저장 - 생성된 소켓과 주소정보 구조체를 연결(INADDR_ANY) - IP/PORT 정보 필요 3. 대기(listen) - 연결 요청 대기 상태 4. 응답(accept) - 연결 요청이 이루어 졌다면 클라이언트 소켓 생성하여 서버 소켓과 연결한다. 더보기
소켓의 종료 1. 소켓 완전 종료 (closesocket) - 상대방에서 EOF 을 전송 - 해당 소켓을 더 이상 사용하지 않는다. (recv size 0) closesocket( SOCKET s ); 2. half-close (shutdown) - 입력, 출력 스트림 또는 모두를 조건에 따라 종료 - 한쪽에서 일방적으로 닫는 방식 - Shutdown 을 하더라도 소켓은 최종적으로 종료를 해야한다 int shutdown( SOCKET s, int how ); 인자(how) : SD_RECEIVE(입력), SD_SEND(출력), SD_BOTH(모두) 더보기
소켓 생성 생성 함수 [리눅스] int socket (int domain, int type, int protocol) [윈도우] SOCKET socket(int af, int type, int protocol) 사용 예 socket(PF_INET, SOCK_STREAM, 0); 더보기
소켓(Socket) 이란? - 멀리 떨어져있는 두개의 HOST 를 연결해 주는 매개체 - 프로토콜에 독립적이며 전송타입지정(TCP/UDP)이 필요한다. - 네트워크 프로그래밍에서는 일반적으로 소켓이라고 하면 윈도우 소켓(Windows)/버클리소켓(UNIX/Linux) API규약을 말한다. 소켓관련 함수들... 윈도우 소켓(윈속) API : MS에서 NT 3.51 에서 버전 1.1 지원 현재는 윈도우 소켓 2.2 버전 사용 SOCKET socket(int af, int type, int protocol); int bind(SOCKET s, const struct sockaddr FAR* name, int namelen); int listen(SOCKET s, int backlog); SOCKET accept(SOCKET s, str.. 더보기