티스토리 뷰

001_communication_between_applications

communication-between-applications

overview

  • 프로그래밍을 하다 보면, 독립적인 프로그램간의 데이터 공유가 필요한 때가 종종 있습니다
    • 동일한 프로그래밍 언어로 작성된 프로그램들이라면, 통합하여 하나의 프로그램으로 실행할 수는 있을 겁니다
    • 하지만, 서로 다른 프로그래밍 언어로 작성된 프로그램이라면, 통합하는 일이 매우 어려워 다른 방법을 사용하곤 합니다
  • 프로그램간 데이터 공유를 위해 크게 2가지 방법을 사용합니다
    • 파일 : 동일한 파일에 공유할 데이터를 쓰고 읽습니다
    • 네트워크 : 공유할 데이터를 소켓으로 주고 받습니다
  • 본 포스팅에서는 네트워크를 사용한 프로그램간 데이터 공유에 대해 알아봅니다

contents

  • 1 : 1 동기화 클라이언트 서버 구조를 예로 들겠습니다
    • 클라이언트는 CSharp 으로 작성됩니다
    • 서버는 Python 으로 작성됩니다
  • reference 의 implementation 에 관련 코드를 작성해두었으며, 아래 영상을 통해 실행 예시를 확인할 수 있습니다
  • 서버 코드 설명
    • 소켓 프로그래밍을 위해 socket 패키지를 포함시킵니다
    • 소켓을 생성할 때 인터넷 프로토콜을 사용할 것이기 때문에 AF_INET 을 사용합니다
    • 생성된 소켓을 특정 IP와 PORT에 묶어줍니다
    • 한 번에 하나의 요청만 처리할 것이므로 listen(1) 을 사용합니다
    • accept() 호출시 클라이언트로부터 요청이 올 때까지 대기하고, 요청이 도착할 경우 클라이언트의 소켓과 주소값을 반환한 뒤 그 이후 코드를 실행합니다
    • 반복문 내에서는 클라이언트로부터의 요청을 계속 기다리며, 올 때마다 ACK ! 메시지를 날려줍니다
  • 클라이언트 코드 설명
    • 소켓 프로그래밍을 위해 System.Net 과 System.Net.Sockets 라이브러리를 포함시킵니다
    • 소켓을 생성할 때 인터넷 프로토콜을 사용할 것이기 때문에 AddressFamily.InterNetwork 를 사용합니다
    • Connect() 를 사용해 서버와의 연결을 요청합니다
    • 반복문은 Q 가 입력되기 전까지 계속 반복됩니다
    • 반복문 내에서는 콘솔을 통해 입력된 문자열을 비트열로 바꿔 서버로 전송한 뒤 응답을 기다리는 작업을 반복합니다
  • 결과
    • 위의 코드들로는 단순히 비트열만 주고 받을 수 있으며, 이를 각 프로그램에서 문자열로 변환하여 출력합니다
    • 이제 이 비트열에 공유해야할 데이터를 실고 인코딩/디코딩을 수행하는 기능을 추가한다면, 문자열이 아닌 다른 형태의 데이터로 변환할 수 있을 것입니다
    • 이러한 방법으로 독립적인 프로그램간의 데이터 공유가 가능합니다

reference


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함