티스토리 뷰
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
가 입력되기 전까지 계속 반복됩니다 - 반복문 내에서는 콘솔을 통해 입력된 문자열을 비트열로 바꿔 서버로 전송한 뒤 응답을 기다리는 작업을 반복합니다
- 결과
- 위의 코드들로는 단순히 비트열만 주고 받을 수 있으며, 이를 각 프로그램에서 문자열로 변환하여 출력합니다
- 이제 이 비트열에 공유해야할 데이터를 실고 인코딩/디코딩을 수행하는 기능을 추가한다면, 문자열이 아닌 다른 형태의 데이터로 변환할 수 있을 것입니다
- 이러한 방법으로 독립적인 프로그램간의 데이터 공유가 가능합니다
- 클라이언트는 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
링크
TAG
- Docker
- vscode
- PopeTV
- windows
- C/C++
- cuDNN
- shader
- dll
- A.I.
- JIT
- Slack
- CUDA
- unreal
- tensorflow
- pclaf
- Anaconda
- visual-studio
- Python
- WindowAPI
- csharp
- git
- CAFFE
- lib
- unity
- NOX
- visualstudio
- ATOM
- DirectX
- Hashtable
- Game
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함