목록네트워크 (4)
물에 사는 벌레
이곳 저곳 들쑤시고 다닌 결과물입니다. [C 서버] #define _WINSOCK_DEPRECATED_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #include #include #pragma comment(lib, "ws2_32") #define PORT 4567 void err_exit(const char* msg) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, 0, WSAGetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&lpMsgBuf, 0, 0); MessageBox(NUL..
송신, 수신 측 모두 TCP 전송 규약을 사용할 때, 소켓 하나가 생성될 때마다 버퍼를 만듭니다. 위의 그림에서는 송신측의 버퍼는 전송을 위한 패킷을 담아두는 버퍼이며, 수신 측 버퍼는 수신한 패킷을 담아두는 버퍼입니다. ...더보기 그림에선 이해를 돕기 위하여 송신측은 송신 버퍼 한 개, 수신 측은 수신 버퍼 한 개가 표현되었지만 실제로는 각 측에 송신용 버퍼, 수신용 버퍼가 생성됩니다. 소켓은 일방적으로 송신 또는 수신만 하는 것이 아니라 송수신 모두 하기 때문입니다. 이제 송신측에서 패킷을 전송하는 경우를 봅시다. 송신 측에서 전송할 패킷이 담긴 임시 버퍼의 내용을 전송하기 위하여 송신 버퍼로 옮깁니다. 스택의 밑부분에 전송할 패킷이 들어갔습니다. 수신 측으로 패킷을 전송합니다. 이때 송신측은 전송..
SOCKET _socket; sockaddr_in _sockaddr_in; int result = bind(_socket, (const sockaddr*)&_sockaddr_in, sizeof(_sockaddr_in)); if (result == SOCKET_ERROR) {/*에러 처리...*/ } result = connect(_socket, (const sockaddr*)&_sockaddr_in, sizeof(_sockaddr_in)); if (result == SOCKET_ERROR) {/*에러 처리...*/ } 보통 소켓에 주소 정보를 할당할 때 bind 혹은 connect 함수를 사용합니다. 그런데 이 두 함수의 두 번째 인자에서 원하는 타입은 'const sockaddr*' 타입입니다. 하지만..
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) 기본적인 TCP 소켓의 생성문입니다. 각각의 자리에는 프로토콜 체계, 소켓의 데이터 전송방식, 프로토콜 정보가 위치하게 됩니다. 기본적인 종류의 인자 값에 대해서만 설명합니다. PF_INET: IPv4 인터넷 프로토콜 선택 책에서 IPv4 기반으로 설명하기 때문에 IPv4 프로토콜을 선택했습니다. IPv4 프로토콜은 32비트로 이루어져 2^32개의 주소를 표현 가능합니다. IPv6 프로토콜은 128비트로 이루어져 2^128개의 주소를 표현 가능합니다. SOCK_STREAM: 연결지향형 소켓 선택 SOCK_STREAM 타입은 연결 지향형으로 보낸 모든 데이터는 목적지로 전송됩니다. - 데이터가 안전하게 목적지로 전달됩니다. - 전송..