네트워크 7

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 파일전송 프로그램 서버정보 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