에코서버 4

WSAEventSelect 모델

WSAEventSelect 모델 MSDN 소켓과 관련된 네트워크 이벤트를 이벤트 객체를 통해 감지한다. 아래 그림과 같이 이벤트 객체를 소켓당 하나씩 생성하고 이벤트 객체들을 관찰하면 멀티스레드를 사용하지 않고도 소켓을 처리할 수 있다. WSAEventSelect 모델의 동작 원리 WSAEventSelect 모델을 사용하면 소켓 함수 호출이 성공할 수 있는 시점을 이벤트 객체를 통해 알 수 있다. 위 그림과 같이 소켓에 대해 이벤트 객체를 생성하여 짝지어두면, 네트워크 이벤트가 발생할 때마다 이벤트 객체가 신호 상태가 된다. 따라서 이벤트 객체의 상태 변화를 관찰함으로써 네트워크 이벤트 발생을 감지할 수 있다. [표 1] WSAEventSelect 모델의 필요 기능과 관련 함수 필요 기능 관련 함수 이벤..

공부 2020.10.20

Select모델 에코서버 프로그래밍

Select모델 에코서버 프로그래밍 Select 모델 소켓모드(블로킹, 넌블로킹)와 관계없이 여러 소켓을 한 스레드로 처리할 수 있다 서버 코드 더보기 #pragma comment(lib, "ws2_32") #include #include #include #define SERVERPORT 9000 #define BUFSIZE 512 // 소켓 정보 저장을 위한 구조체와 변수 struct SOCKETINFO { SOCKET sock; char buf[BUFSIZE + 1];// 맨 끝에 '\0' int recvBytes; int sendBytes; }; int nTotalSockets = 0; SOCKETINFO* socketInfoArray[FD_SETSIZE]; // 소켓 관리 함수 BOOL AddSo..

공부 2020.10.17

TCP 에코서버 프로그래밍

TCP 에코 서버 / 클라이언트 프로그래밍 서버 코드 클라이언트 코드 실행결과 서버 코드 #include #include #include #include #include #pragma comment(lib, "Ws2_32.lib") int main() { setlocale(LC_ALL, "korean"); WSADATA wsaData; int ret; ret = WSAStartup(MAKEWORD(2, 2), &wsaData); if (ret != 0) { wprintf_s(L"error WSAStartup() [%d]\n", ret); return 1; } SOCKET listenSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (listenSock == I..

공부 2020.10.10

20200901 공부

1. 에코서버 만들기 2. 데이터 전송하기 3. 문제풀이 4. Win32 API 게임 작업 1. 에코서버 만들기 서버 코드 더보기 #include #include #include #pragma comment(lib, "Ws2_32.lib") // 서버 프로그램 int main() { // 윈속 초기화 WSADATA wsa; if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) { printf_s("error WSAStartup()\n"); return 1; } // 소켓생성 SOCKET servSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (servSock == INVALID_SOCKET) { printf_s("error socket..

공부 2020.09.02