토이프로젝트/LANShare
-
LANShare 파일 전송 프로토콜 구축 - 재정립토이프로젝트/LANShare 2023. 2. 28. 20:14
지금까지 세 번째 프로토콜을 수정 중입니다...뭔가 억지로 만든 것 같아서, 다음과 같은 프로토콜을 새롭게 정의했습니다.전체 패킷의 크기 정보를 아예 통으로 전달하는 방식입니다.간단히 내가 보내고자 하는 데이터를 정의해보면 다음과 같습니다.명령어 정보 (4바이트)실제 데이터의 길이 (4바이트)실제 데이터 (n 바이트)위의 세 데이터가 "Hello World" (총 11바이트 ANSI 문자열)인 경우,명령어 정보를 담을 공간 4바이트 + 실제 데이터 길이를 담을 공간 4바이트 + 실제 데이터 11바이트를 합하면 총 19바이트입니다. 그리고 이제 총 19바이트를 담을 수 있는 공간을 4바이트 크기로 하나 더 만듭니다.그러면 총 23바이트가 됩니다.위와 같이 보내면, 받는 쪽에서는 가장 먼저 앞의 8바이트 ..
-
LANShare 파일 전송 프로토콜 구축 - 프로토콜 정립토이프로젝트/LANShare 2023. 2. 5. 20:52
일반적으로 소켓통신을 하더라도, 송신자가 Send(..) 를 하더라도 해당 내용이 바로 원하는 클라이언트에게 전송되는게 아니라, 송신 버퍼에 저장이 되었다가 어느정도 쌓인 경우 전달한다. 수신자가 Recv(..) 를 하더라도 수신버퍼에 쌓여있는 데이터를 읽어온다. 그렇다면 수신자가 어떤 행위를 해야할까? 라는 생각을 했을 때 다음과 같은 생각이 들었다. 1. 송신자, 수신자가 둘 다 처음 받는 8바이트는 메타데이터 정보이다. 2. 인지를 하고 있다면 해당 메타데이터의 정보를 보고 원하는 데이터만큼 수신을 한다. 이 상태라면 원하는 데이터를 다 받을 수 있을 것 같았다. 위 그림과 같이 명령어 정보와 수신해야할 데이터의 크기 정보만 보내 후에 원래 보내고자 했던 데이터를 잘라서 보내던 통으로 보내던 계속해..
-
LANShare 파일 전송 프로토콜 구축 - 문제점 발생토이프로젝트/LANShare 2023. 1. 27. 19:27
이전에 설계 했던 프로토콜의 문제점이 한가지 있다. 이런 형태로 정보를 송신할 경우 다음과 같은 문제가 생긴다. 데이터를 보내는건 좋은데, 문제점이 소켓 내부적으로 처리하는 방법이 다르다. TCP 통신에서는 Application이 메세지를 보낸다고(Send) 하더라도 바로 전송되는 것이 아니다. 소켓 버퍼(Send Socket Buffer) 라는 버퍼에 쌓인 후 적절한 시기에 상대방에세 메세지가 전송되고 버퍼가 지워진다. 받는쪽에서도 마찬가지로 메세지가 오면 일단, 소켓버퍼에 저장된 후 Application에서 Read 함수를 호출 할 때 소켓 버퍼에 쌓인 메세지를 읽어들인다. 그럼 저런식으로 보낸 메세지가 만약 8바이트라고 가정해보자. 1. 앞에 4바이트는 명령어 정보 2. 뒤에 4바이트는 추가적인 정..
-
LANShare 파일 전송 프로토콜 구축토이프로젝트/LANShare 2023. 1. 23. 22:41
LANShare 파일 전송 프로토콜 구축 내용 의미 있는 파일이 생성되는 순서는 다음과 같다. 빈 파일을 생성한다. 파일에 데이터를 추가한다. 파일이 의미있는 파일이 되기 위해서는 위와 같은 과정을 거쳐야한다. CreateFile을 통해 저장될 파일을 생성한다. (이때 CreateFile이 호출이 된 시점에서의 파일 크기는 0바이트 이다.) 이후, WriteFile을 사용하여, 이전에 생성된 파일에 데이터를 추가한다. 모든 데이터를 추가한 경우 비로소 유효한 파일이 된다. 서버와 클라이언트의 관점에서 보면 다음과 같다. 서버는 P2P에 접속된 클라이언트에게 파일생성하라는 명령을 보낸다. 이때, 클라이언트는 데이터를 받았을 때, 이 데이터가 어떤 데이터 인지는 모른다. 그러므로, 미리 정의된 프로토콜을 기..
-
LANShare 프로젝트 소개토이프로젝트/LANShare 2023. 1. 23. 20:16
이 프로젝트는 다음과 같은 사례에서 시작되었습니다. 일반적으로 대학교에서는 새로운 프로그램을 도입할 경우, 해당 프로그램을 사람이 직접 설치를 해야합니다. 하지만, 이러한 방식은 상당히 레거시합니다. 반복적이며 불필요한 시간을 할애해야 합니다. 더욱 스마트하고, 간편한 방법을 사용할 수 있어야합니다. 만약, 어떠한 파일을 받기위해, 누군가가 직접 다음 강의를 위해 프로그램을 삭제하거나 재설치하는 번거로움이 존재해서는 안됩니다. 이러한 부분을 최소화 하기 위해, FTP 서버를 열고 많은 클라이언트가 접속해서 파일을 받아간다면 어떨까요? 하지만, 이러한 방법은 1가지일을 100번반복하기 위해 적은인원이 하기에는 상당히 번거롭습니다. 그렇다면, LANShare 프로젝트를 통해, 클라이언트 PC들의 전원을 키고..