해결
-
1바이트는 왜 8비트일까?프로그래밍/의문 2016. 2. 2. 22:30
컴퓨터가 처리하는 정보의 최소단위. 비트보다 높다. 옛날에는 4비트, 6비트를 1바이트로 삼는 컴퓨터도 있었으나, 현대(적어도 1984년 이후)의 대개의 컴퓨터 아키텍처에서, 1옥텟, 즉 8비트로 1바이트를 삼는다. 표준 C 언어에서는 '8비트 이상'을 1바이트로 삼도록 규정하고 있다. "byte"는 1956년에 Dr. Werner Buchholz에 의해서 사용되었고, 이는 IBM의 IBM scratch computer를 디자인하는 동안 사용되었다. 이때는 4bit를 1byte로 설계되었다고 한다. 전형전인 I/O장비는 6bit를 1byte로 사용하다가, 나중에 System/360에 8bit를 1byte를 사용하기 시작하면서, 규격이 정해지고 표준화 되었다. 일정한 개수의 비트로 이루어진 연속된 비트열...
-
ODBC BindParametert 사용 시 문자열의 길이로는 SQL_NTS를 넣어줘야 한다.프로그래밍/의문 2015. 10. 28. 20:27
내가 실행할 쿼리 const char* query = "{ call get_account_info_by_id ( ? ) }"; 인자로는 유저의 id를 받는다. 그리고 유저의 계정 정보를 반환한다. 그런데 쿼리는 정상적으로 실행이 되는데, fetch의 반환 값이 SQL_NO_DATA인 것이었다. 왜지? 존재하는 유저로 요청을 했는데? 여기저기 검색을 해서 찾아봤는데, SQLBindParameter에 문자열을 쓰려면(출력 또는 입력으로) SQL_NTS를 인자를 줘야한다는 내용이 보였다. 그리고 정말 되나 실행해봤는데 검색이 정상적으로 되더라. 123456789 connector.prepare(query); // 쿼리의 출력 인자를 설정합니다. SQLINTEGER procreslen = SQL_NTS; // ..
-
서버 코딩 중 있었던 수신 직후 소켓이 닫히던 버그프로그래밍/의문 2015. 5. 25. 03:23
12345678910111213141516171819202122232425262728293031323334void User::CheckIoError(int result){ if (result == SOCKET_ERROR) { // ERROR_IO_PENDING 오버랩 연산이 성공적으로 시작되었으나, 나중에 완료될 것. const auto error = WSAGetLastError(); if (error != WSA_IO_PENDING) // * 이 부분이 error = WSA_IO_PENDING으로 되어있었다. {// 여기에 걸리면 진짜 오류다. this->Close(); /* WSAECONNABORTED 10053 타임아웃 혹은 상대방의 접속종료들과 같은 소프트웨어적인 문제로 연결이 끊겼음. WSAEC..
-
C++ 서버 프레임워크 제작 중 연산자 재정의로 인해 발생한 버그프로그래밍/의문 2015. 5. 23. 23:20
123456789101112131415161718void User::Receive(){ DWORD recvBytes; DWORD flags = 0; SOCKET s = m_socket; auto bytesTransferred = WSARecv( m_socket,//m_socket.GetNativeSocket(), &m_receiveBuffer.wsaBuffer, 1, &recvBytes, &flags, &m_overlapped, NULL); // ...}Colored by Color Scriptercs 문제는 저 부분이었다. m_socket. 여기서 m_socket의 정의는 Nelta::StreamSocket m_socket이다. StreamSocket은 윈도우 소켓을 다루는 게 서툴렀던 내가 TCP 소..