문제 상황 ) 수신 버퍼에 데이터가 없는데, **read** 송신 버퍼가 꽉 찼는데, **write** Select 모델(selec함수가 핵심) 소켓 함수 호출이 성공할 시점을 미리 알 수 있다. 블로킹 소켓 : 조건이 만족되지 않아서 블로킹되는 상황 예방 논 블로킹 소켓 : 조건이 만족되지 않아서 불필요하게 반복 체크하는 상황을 예방 실행 순서 읽기[ ] 쓰기[ ] 예외(00B)[ ] 관찰 대상 등록 단) OutOfBrand는 send() 마지막 인자 MSG_OOB로 보내는 특별한 데이터 받는 쪽에서도 recv 00B 세팅을 해야 읽을 수 있음. select(readSet, writeSet, exceptSet); -> 관찰 시작 적어도 하나의 소켓이 준비되면 리턴 -> 낙오자는 알아서 제거됨 남은 소켓..
책 ) TCP/IP 윈도우 소켓 프로그래밍 지금까지 공부했던 서버는 두가지의 서버로 분류 할 수 있다. 반복서버(iterative server) 여러 클라이언트를 한번에 하나씩 처리한다. 단일 스레드로 구현하며, 시스템 자원소모가 적다. 하지만 한 클라이언트의 처리 시간이 길어지면 다른 클라이언트의 대기시간이 길어진다. (UDP 서버를 작성할때 적합) 병행 서버(concurrent server) 여러 클라이언트를 동시에 처리한다. 멀티스레드 서버가 해당되고, 한 클라이언트의 처리 시간이 길어지더라도 다른 클라이언트에 영향을 주지 않는다. 다만 스레드를 여러 개 생성하여 구현하므로 시스템 자원 소모가 많다. 이상적인 소켓 입출력 모델의 특징 가능한 많은 클라이언트가 접속할 수 있다. 서버는 각 클라이언트의..
여태껏 만들던 서버는 동기 형식의 서버로써, accept() | connect() | send() | recv() | sendto() | recvfrom() 함수 모두 호출 시 조건이 만족될 때 까지 무한정 대기하는 형식을 취합니다. 따라서 조건이 맞지 않으면 다른 행동을 할 수 없습니다. 그렇다면, 비동기 형식은 무엇이냐? 비동기 형식은 소켓 함수 호출 시 조건이 만족되지 않더라도 함수가 리턴을 하므로 중단 없이 다음 코드를 수행할 수 있습니다. 다만 조건이 만족되지 않아서 리턴하게 되면 WSAEWOULDBLOCK코드를 리턴합니다. 따라서 WSAGetLastError()를 통해서 확인을 해야 합니다. 호출 방식은 아래와 같습니다. 전체적인 예제도 참고해서 봐주시면 감사하겠습니다. Client는 기본 세..
원래 코드에 호스트이름을 입력하면 호스트의 IP주소들을 얻어서 출력하는 형식또한 추가하였습니다. 클라코드 더보기 //Client #pragma warning(disable:4996) #pragma comment(lib, "ws2_32.lib") #include #include #include #include "resource.h" #define SERVERIP "127.0.0.1" #define SERVERPORT 9000 #define BUFSIZE 512 //윈도우 프로시저 BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM); //편집 함수 void DisplayText(const char* fmt, ...); //오류 출력 함수 void err_quit(cons..
책 : TCP/IP 윈도우 소켓 프로그래밍 간단하게 WINAPI를 활용하여 GUI 환경에서 TCP 소켓 프로그래밍에 대한 코드를 작성하였습니다. 물론 예제에 있는 코드입니다. 작동형식은 아래의 사진과 같이 작동하고, 각 서버와 클라이언트 프로젝트 파일에서 리소스 Dialog를 생성하여야 합니다. 추가 -> 새항목 -> 리소스 -> 리소스 파일 ->Dialog 선택 하시면 생성하실 수 있습니다. 클라코드 더보기 //Client #pragma warning(disable:4996) #pragma comment(lib, "ws2_32.lib") #include #include #include #include "resource.h" #define SERVERIP "127.0.0.1" #define SERVERP..
5장 연습문제 //Client #pragma warning(disable:4996) #pragma comment(lib, "ws2_32.lib") #include #include #include #define MAXLINE 512 #define PORTNUM 5000 int main() { ..... while (1) { .... addrlen = sizeof(peeraddr); int result; retVal = recvfrom(sockfd, (char*)&result, sizeof(int), 0, (SOCKADDR*)&peeraddr, &addrlen); if (retVal == SOCKET_ERROR) { err_quit("Recvfrom"); break; } if (memcmp(&peeraddr..
책) TCP/IP 윈도우 소켓 프로그래밍 간단하게 멀티쓰레드로 send, recv만 해보았습니다. Create Thread API 정리 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // Security Descriptor 보안설정 옵션, default = null; SIZE_T dwStackSize, // initial stack size 생성시 요구되는 스택 공간 크기 default = 0; LPTHREAD_START_ROUTINE lpStartAddress, // thread function 쓰레드가 실행할 함수의 포인터 (원형이 있음) LPVOID lpParameter, // thread argument 함수의 인자 DWORD dw..
책) TCP/IP 윈도우 소켓 프로그래밍 5장 TCP 서버 - 클라이언트 모델에서 데이터를 전송하는 방식은 다양한 방식이 있다. 1. 고정 길이 데이터 전송 2. 가변 길이 데이터 전송 3. 고정 + 가변 길이 데이터 전송 4. 송신자 데이터 전송후 접속 종료, 수신자는 recv()함수의 리턴값이 0이 될때까지 읽는다. 클라이언트 측에서 먼저 길이를 send 후 데이터를 전송하고, 서버측은 길이를 recv로 받은 후 받은 길이 만큼 recv한다. //DummyClient #pragma warning(disable:4996) #pragma comment(lib, "ws2_32.lib") #include #include #include #define MAXLINE 50 #define PORTNUM 5000 ..
- Total
- Today
- Yesterday
- 자료구조
- 학교
- 스레드풀
- 레지스터
- 알고리즘
- c++
- 멀티쓰레드
- 지뢰찾기
- Dreamhack
- 야경
- 시스템보안
- 인제대학교
- 워셜알고리즘
- BFS
- 정보보안
- 보안
- 링크드 리스트
- STL
- 백준
- 고양이
- 컨퍼런스
- 개발
- queue
- 더블버퍼링
- Select모델
- 드림핵
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |