공부 28

WSAEventSelect 모델

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

공부 2020.10.20

복습) 문제 만들기 20201020

문제를 만들면서 복습을 해보자 문제 1) OSI 7계층을 서술하시오 2) TCP/IP 4계층을 OSI와 비교하여 서술하시오 3) OX문제, TCP를 사용하는 서버 프로그램과 UDP를 사용하는 서버 프로그램이 각각 10010번 포트를 지정하고 실행했다. 오류가 난다 O, 안난다 X 4) OX문제, 하나의 포트는 여러개의 프로세스가 사용 가능하다. 맞으면 O, 틀리면 X 5) OX문제, 하나의 프로세스는 여러개의 포트를 사용 가능하다. 맞으면 O, 틀리면 X 6) 방화벽의 인바운드와 아웃바운드를 서술하시오. (Windows 방화벽 기본규칙 및 규칙 추가의 의미) 내가 주어와서 모아모아 작성한 정답 1) 1. 물리계층 (Physical Layer) - 실질적인 전송을 담당 - 데이터를 전기적 신호로 변경해주며..

공부 2020.10.20

WSAAsyncSelect 모델 서버 프로그래밍

WSAAsyncSelect 모델 서버 프로그래밍 MSDN 서버 코드 더보기 #pragma warning(disable : 4996) #pragma comment(lib, "ws2_32") #include #include #include #include #include #define SERVERPORT 9000 #define BUFSIZE 512 #define WM_SOCKET (WM_USER+1) // 소켓 정보 저장을 위한 구조체와 변수 struct SOCKETINFO { SOCKET sock; char buf[BUFSIZE + 1]; int recvbytes; int sendbytes; BOOL recvdelayed; SOCKETINFO* next; }; SOCKETINFO* socketInfoLis..

공부 2020.10.19

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 파일전송 프로그램 서버정보 localhost(127.0.0.1):7000 송신할 파일정보 이름 Blackpink.jpg 파일크기 415,128 바이트 실행결과 서버 클라이언트 서버 코드 #include #include #include #pragma comment(lib, "Ws2_32.lib") #pragma pack(push, 1) typedef struct st_PACKET_HEADER { DWORD dwPacketCode;// 0x11223344 우리의 패킷확인 고정값 WCHAR szName[32];// 본인이름, 유니코드 NULL 문자 끝 WCHAR szFileName[128];// 파일이름, 유니코드 NULL 문자 끝 int iFileSize; } PACKET_HEADER; #pragma..

공부 2020.10.13

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

내 PC의 backlog 큐 개수 구하기

내 PC의 backlog 큐 개수 구하기 20210731 수정 아이디 '백수'님의 조언을 참고해서 클라이언트 코드를 수정해서 다시 테스트 해 보았다 생각해보니 현재 테스트는 클라이언트의 연결이 유지될 필요가 없었다 connect() 후 closesocket()을 호출하도록 코드를 수정했다 TIME_WAIT 상태가 남지 않도록 링거옵션도 추가했다 클라이언트 코드 #pragma comment(lib, "Ws2_32.lib") #include #include #include int main() { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { wprintf_s(L"WSAStartup() errcode[%d]\n", WSAGetLastErr..

공부 2020.10.08

20201005 월요일 정리

TCP 연결형 연결형이란 IP와 PORT를 메모리에 기억하고 있는 상태 클라이언트가 연결을 정상적이지 않은 방법으로 끊었을 경우 (PC가 꺼지거나 네트워크선이 뽑히는 등) 서버에서는 언제 연결이 끊겼는지 알 수 있나? 서버에서 클라이언트에 패킷을 보냈을 때의 응답 유무로 연결이 끊겼는지 확인 하트비트 - 연결이 끊겼는지 L7차원에서 확인 (클라 -> 서버) 신뢰성 일대일 데이터 경계 구분 없음 UDP 비연결형 비신뢰성 일대다 (브로드캐스트, 멀티캐스트) 데이터 경계 구분 있음 TCP가 커널에서 하는 일이 더 많다 상대방의 버퍼 확인 양쪽 (클라/서버) 송신버퍼 수신버퍼 100바이트를 두번 송신 send(100) send(100) 수신 버퍼에 처리되지 않은 60바이트의 데이터가 있을 경우 송신측에서는 데이..

공부 2020.10.06

IPv4 서브넷 연습

사설네트워크 나누기 연습 사설네트워크 : 10.0.0.0/8 본사 부서 : 10개 부서 인원 : 10인 이하 6개 부서, 20인 이하 4개 부서 지사 5개 부서 : 6개 인원 : 2인 부서 3개, 7인 부서 2개, 15인 부서 1개 크게 먼저 나누면 본사 10.0.0.0/16 (11111111.11111111.00000000.00000000) 지사1 10.1.0.0/16 지사2 10.2.0.0/16 지사3 10.3.0.0/16 지사4 10.4.0.0/16 지사5 10.5.0.0/16 8bit 메이저비트 + 8bit 서브넷비트 지사255 까지 확장 가능 먼저 본사를 나누자! 최대 필요 호스트비트개수를 더 많은 수인 20인 이하를 기준으로 구한다 20인 이하 부서 호스트비트 5개(2^5 - 2 = 30) 로..

공부 2020.09.26