socket 6

#017_Window_Network_Non Blocking Socket

안녕하세요 삽잡이입니다. 이번 시간에는 Non Blocking Socket에 대해서 배워보려고합니다. 소켓에는 두 가지의 종류가 있습니다.바로, '블록킹 소켓'과 '넌 블록킹 소켓'이 있는 것입니다. 필자가 Nework Programming 에 대해서 글을 올리며 사용했던 방식은 모두 블록킹 소켓이었습니다.블록킹 소켓을 사용한다면,블록킹 소켓 내 IO 함수들은 자신의 목적(기능)을 완료할 때 까지 Blocking 상태에 놓입니다.이 블록킹 상태에 놓이는 I/O 함수들은 accept(), recv(), send(), connect() 함수등과 UDP에서 사용하는 recvfrom(), sendfrom()함수 등이 있습니다.즉, 이와 같은 I/O 함수들이 자신의 목적을 완료할 때 까지 Blocking 상태로 ..

#012_Window_Network_클라이언트 서버 통신 (소켓 관점)

안녕하세요 삽잡이입니다. 이번 시간에는 소켓 관점에서 본 클라이언트와 서버간 통신에 대해서 살펴보도록 하겠습니다. 참고로, 이전 내용들을 이해하지 않고 오시면 이해하는데 불편함이 있으실 수 있으니혹여나 처음 접하시는 분들은 이전 글들을 참고해주시길 바랍니다. 우리가 클라이언트와 서버의 통신 때 사용하던 send 함수의 예시입니다.이때 첫번째 인자인 '통신 소켓 핸들'은 클라이언트와 서버간에 통신을 위해 사용됩니다.즉, 통신 소켓의 핸들에는 현재 자신의 IP도 있지만, 상대방의 정보들도 알고 있다 이겁니다.다시말하면, 통신 소켓의 핸들을 통해 서로 연결되어있는 서버와 클라이언트간에 통신이 가능해지는 것입니다. send() 함수를 봤으니 이제 잠시 resv() 함수를 볼까요?recv() 함수에는 통신 소켓과..

#010_Window_Network_클라이언트 서버 통신 (TCP 클라이언트 - 코드)

안녕하세요 삽잡이입니다. 이번 시간에는 TCP 서버가 데이터를 받고 뿌리는 현장을 코드와 함께 살펴보겠습니다. TCP 클라이언트도 다르지 않습니다. 우선 소켓을 하나 생성합니다. 그리고 클라이언트도 소켓 구조 주소체에 정보들을 채워넣습니다.서버에서 배웠는데.... 복습하는겸 다시 한번 가볍게 살펴보자면...소켓 주소를 채우는 것입니다. '주소 체계', 'IP', '포트번호'이들을 묶어서 소켓 주소라고 부르며, 우리가 생성한 소켓에 집어넣는 것입니다. 여기서 주소를 보시면 '127.0.0.1' 이라고 채워져 있는 코드를 확인할 수 있습니다.이는 루프백 주소라고 부르는데, 라우터를 거치지 않습니다.내 컴퓨터 내에 OS에서는 TCP, IP, 데이터 링크 수준들이 존재합니다.데이터를 주고 받기 위해서는 내 컴퓨..

#007_Window_Network_오류 메시지 확인

안녕하세요 삽잡이 입니다. 이번 시간에는 간단하게 오류 메시지를 확인하는 함수들에 대해 알아보겠습니다. WSAGetLastError() 함수는 오류 메시지를 확인해주는 함수입니다. 원래 WSA가 없이 GetLastError 라는 함수가 있습니다.윈도우 네트워크 API 답게 앞에 이름을 붙여준 것이지요.... 모든 쓰레드는 자신만의 에러코드를 받는 방이 있습니다.즉, 4바이트 짜리 정수를 받는 방이 있다는 것입니다.각 쓰레드 별로 해당 함수를 호출하게되면 에러 코드를 받는 방에서 에러 코드를 받아오게 됩니다. 커널 오브젝트와 관련된 어떤 함수를 호출했을 때 에러를 발생하게 되면 그 에러 코드 값을 에러 코드를 받는 방에 보관을 하게 됩니다. (말이 어렵군요...)그 정보를 꺼내 오는 함수가 바로 GetLa..

#004_Window_Network_바이트 정렬

안녕하세요 삽잡이입니다. 이번 시간에는 바이트 정렬에 대해서 알아보도록 하겠습니다. 우선 바이트 정렬이 뭔지 알아보기 전에 변수 하나를 생성하고 그 안에 값을 채웠다고 해보겠습니다.그러면 데이터는 어떻게 채워질까요?채워지는 방법에는 두가지 방법이 있습니다. int n = 0x1234 라는 값을 초기화 했다고 가정해봅시다. n은 int형 변수로써 4개의 바이트를 가지고 있겠지요...위의 그림과 같이 데이터가 저장됩니다.그런데 왜 두가지가 표현됬을까요? 바로 두 방식이 모두 표준이기 때문입니다. 작은쪽의 주소에 끝값을 보관하고, 큰 쪽 주소에 앞쪽 값을 보관하고 있는 방법.작은쪽의 주소에 앞쪽 값을 보관하고, 큰쪽 주소에 끝 값을 보관하고 있는 방법. 작은 쪽 주소에 끝값을 저장한다고 해서 리틀 엔디안 방식..

[삽잡이::Socket] Socket 프로그래밍 구조 (server)

TCP 서버의 기본적인 함수 호출 순서. - TCP(Transmission Control Protocol)란? 데이터 전송과정의 컨트롤. 1. 소켓의 생성 (ex) 전화기 구입 #include int socket(int domain, int type, int protocol); - domain : 소켓이 사용할 프로토콜 체계(Protocol Family)전달. 프로토콜 체계 - IP_INET( IPv4 인터넷 프로토콜 체계) - IP_INET6( IPv6 인터넷 프로토콜 체계) - IP_LOCAL( 로컬 통신을 위한 UNIX 프로토콜 체계) - IP_PACKET( Low Level 소켓을 위한 프로토콜 체계) - IP_IPX (IPX 노벨 프로토콜 체계) - type : 소켓의 데이터 전송방식에 대한 정..