All 215

2진수의 음수표현법

부호비트 최상위비트(MSB : Most Significant Bit)는 부호비트라고 하는데 부호비트가 0이면 양수, 1이면 음수를 나타낸다. 2진수의 계산 10진수 1은 2진수로 00000001 이다. 그러면 음수인 -1은 2진수로 얼마일까? 흔히 10000001이라고 생각하기 쉽지만, 실제로 10진수 -1 의 2진수는 11111111이다. 컴퓨터는 빼기 연산을 할 수 없기 때문에 대신 빼기 연산을 덧셈처럼 수행한다. 1-1=0이 1+(-1)와 같은 것과 같다. 2의 보수를 이용하면 위와 같이 덧셈으로 뺄셈 계산이 가능하다. 2의 보수를 이용해서 1-1을 계산해보자. 먼저 1을 -1로 바꾼다. 00000001 -> 11111110 // 0은 1로, 1은 0으로 바꾼 다음 11111110 -> 111111..

소켓 입출력 모델 비교

소켓 입출력 모델장점 단점 Select 모델모든 윈도우 버전은 물론 유닉스에서도 사용할 수 있으므로 이식성(특히 하위 호환성)이 높다. 하위 호환성을 위해 존재하며, 성능은 여섯 가지 모델 중 가장 떨어진다.64개 이상의 소켓을 처리하려면 여러개의 스레드를 사용해야 한다. WSAAsyncSelect 모델 소켓 이벤트를 윈도우 메시지 형태로 처리하므로, GUI 애플리케이션과 잘 결합 할 수 있다. 하나의 윈도우 프로시저에서 일반 윈도우 메시지와 소켓 메시지를 처리해야 하므로 성능저하의 요인이 된다. WSAEventSelect 모델Select 모델과 WSAAsyncSelect 모델의 특성을 혼합한 형태로, 비교적 뛰어난 성능을 제공하면서 윈도우를 필요로 하지 않는다. 64개 이상의 소켓을 처리하려면 여러 개..

카테고리 없음 2017.07.22

소켓 입출력 모델, 블로킹/넌블로킹 소켓

소켓 입출력 모델 다수의 소켓을 관리하고 소켓에 대한 입출력을 처리하는 일관된 방식을 뜻함.시스템 자원을 적게 사용하면서도 다수의 클라이언트를 효율적으로 처리하는 서버를 만들 수 있다. * 블로킹 소켓 vs 넌블로킹 소켓 1. 블로킹 소켓블로킹 소켓은 소켓 함수 호출 시 조건이 만족되지 않으면 함수가 리턴하지 않고 스레드 실행이 정지된다.조건이 만족되면 소켓 함수가 리턴하면서 정지된 스레드가 깨어나 실행을 재개한다.※ 주요 소켓 함수의 리턴 조건accept() - 접속한 클라이언트가 있을 때connect() - 서버에 접속을 성공했을 때send(), sendto() - 응용 프로그램이 전송을 요청한 데이터를 소켓 송신 버퍼에 모두 복사했을 때recv(), recvfrom() - 소켓 수신 버퍼에 도착한 ..

카테고리 없음 2017.07.22

소켓 옵션, Nagle 알고리즘

소켓 옵션 의미 소켓 옵션을 사용하면 소켓 함수의 기본 동작을 변경할 수 있으며, 이를 통해 소켓코드와 프로토콜 구현 코드를 세부적으로 제어 가능. 소켓 옵션은 처리 주체에 따라 크게 두 종류로 구분 1. 소켓 코드가 처리하는 옵션 (setsockopt() 두번째 옵션 - SOL_SOCKET)옵션을 설정하면 소켓 코드에서 해석하고, 처리한다. 2. 프로토콜 구현 코드가 처리하는 옵션 (setsockopt() 두번째 옵션 - IPPROTO_IP, IPPROTO_TCP)옵션을 설정하면 프로토콜 구현 코드에서 해석하고 처리한다. 프로토콜 의존적인 성격이 있으므로 프로토콜 종류에 따라 옵션 자체가 달라진다. 소켓 옵션 - SO_REUSEADDR 옵션 현재 사용 중인 IP주소와 포트번호를 재사용할 수 있다.다시 ..

카테고리 없음 2017.07.22

유니캐스트, 브로드캐스트, 멀티캐스트

유니캐스트, 브로드캐스트, 멀티캐스트 1. 유니캐스팅 (one-to-one)한 개체가 다른 한 개체에 데이터를 보내는 모델IPv4, IPv6에서 지원 2. 브로드캐스팅 (one-to-many)특정 네트워크(자신과 동일 네트워크도 가능)에 속한 모든 개체에 데이터를 보내는 모델IPv4에서만 지원 3. 멀티캐스팅 (one-to-grouped many)동일 그룹에 가입한 모든 개체(물리적으로는 서로 다른 네트워크에 속할 수 있음)에 데이터를 보내는 모델IPv4, IPv6에서 지원 4. 애니캐스팅 (one-to-one-of-many)한 개체가 동일 그룹에 가입한 개체 중 가장 가까운 하나에만 데이터를 보내면데이터를 받은 개체가 그룹에 속한 나머지 개체에 데이터를 보내는 모델IPv6에서만 지원 브로드캐스트 종류 ..

카테고리 없음 2017.07.22

소켓 프로그래밍을 전화기에 비유하여 이해하기

전화기 장만소켓생성socket 함수호출번호 부여IP 주소와 Port 번호 할당bind 함수호출전화선 연결연결 요청 가능상태로 변경listen 함수호출수화기 들기연결 요청에 대한 수락 accept 함수호출전화 걸기소켓 연결 요청(클라이언트 -> 서버)connect 함수호출 TCP 윈속 코드 기본 구조 서버윈속 초기화socket() - 접속용 소켓 생성bind() - 소켓주소구조체와 소켓을 바인딩listen() - 리스닝 상태로 accept() - 클라이언트와 통신할 소켓 생성 (UDP는 없음. 비연결형 프로토콜이라서) recv() - 데이터 받기 send() - 데이터 보내기 closesocket() - 통신 소켓 닫기closesocket() - 접속용 소켓 닫기윈속 종료 클라이언트윈속 초기화socket(..

카테고리 없음 2017.07.22

우분투에 Eclipse C, C++ 개발환경 구축하기

Eclipse를 사용하기 위해서는 우선 JDK(JAVA Development Kit)이 설치 되어야 한다. JDK 설치 후 Eclipse 설치를 하고 최종적으로 CDT(C/C++ Development Tooling)를 설치한다. 1. JDK 설치 예전에는 apt-get를 이용해 쉽게 JDK를 설치 할 수 있었지만 더 이상 해당 repository가 지원되지 않기 때문에 새로운 repository를 추가해준 뒤 설치 한다. OpenJDK 가 아닌 Oracle JDK의 설치법이다. openJDK 설치는 간단히 아래 명령어로 설치하면 된다. $ sudo apt-get install openjdk-7-jdk 1) OpenJDK 제거 $ sudo apt-get purge openjdk* 2) repository ..

카테고리 없음 2017.07.21

우분투에 Android Studio 설치하기

안드로이드 스튜디오 설치방법 1. 홈페이지에서 다운로드 2. 다운로드한 .zip 파일의 압축을 애플리케이션의 적절한 위치에 풉니다(예: 사용자 프로필의 경우 /usr/local/ 또는 공유 사용자의 경우 /opt/). 3. Android Studio를 시작하려면 터미널을 열고 android-studio/bin/ 디렉토리로 이동한 다음 studio.sh를 실행합니다. 팁: android-studio/bin/을 PATH 환경 변수에 추가하면, 모든 디렉토리에서 Android Studio를 시작할 수 있습니다. 4. 이전의 Android Studio 설정을 가져올지 여부를 선택한 다음, OK를 클릭합니다. 5. Android Studio Setup Wizard가 나머지 설정을 안내합니다. 여기에는 개발에 필요..

카테고리 없음 2017.07.21