ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PC간 데이터 전송 - 소켓 통신
    analysis 2024. 12. 31. 09:59

    시작하기 전에 

     

    실시간으로 FFT 하기 - 미니프로그램과 ai :: hsl's tsmaster 사용기 에서 TSMaster의 FFT 계산 결과를 소켓 통신으로 동일 PC의 FFT Visualizer 프로그램으로 전달하는 방법을 설명했다. 

     

    소켓 통신으로 서로 다른 PC의 프로그램 사이에 통신이 가능한지 확인해보았다.

     

     

    개요

    • 클라이언트(TSMaster 미니프로그램)쪽 코드 수정 
    • 서버(FFT Visualizer)쪽 코드 수정
    • 실행 결과

     

     

    클라이언트(TSMaster 미니프로그램)쪽 코드 수정

    • FFT 계산 결과를 보내는 쪽인 TSMaster 미니프로그램이 클라이언트이다. 
    • FFT 계산 결과를 그래프로 표시하는 FFT Visualizer가 서버이다.  
    • 소켓 통신을 연결할 때, ip 주소에 FFT Visualizer가 동작하고 있는 PC의 ip 주소를 설정한다. 아래 코드 중에 self.client_socket.connect(('192.168.0.14', port)) 부분이다.  동일 PC에서 소켓 통신을 할 경우, ip 주소를 'localhost'로 설정한다.
    ## FFTDataSender 클래스
    class FFTDataSender:
        def __init__(self, port=5000):
            self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
            # 네트워크에 연결된 다른 PC에서 FFT visualizer를 실행하고
            # 그 PC의 ip 주소를 입력하면, 그 PC에서 데이터가 표시된다.  
            self.client_socket.connect(('192.168.0.14', port))
    
            # 동일 PC에서 FFT 비주얼라이저를 실행할 경우
            # ip 주소에 localhost라고 입력한다.
    #         self.client_socket.connect(('localhost', port))

     

     

     

    서버(FFT Visualizer)쪽 코드 수정

    • TSMaster 미니프로그램보다 FFT Visuzlizer를 먼저 실행한다. 
    • FFT Visualizer가 (동일 PC의 다른 프로그램이 아닌) 네트워크를 모니터링하면서 소켓 통신을 대기할 수 있도록 ip 주소를 '0.0.0.0'으로 설정한다. 아래 코드 중에 self.server_socket.bind(('0.0.0.0', port)) 부분이다. 동일 PC에서 소켓 통신을 할 경우, ip 주소를 'localhost'로 설정한다.  
    class FFTVisualizer:
        def __init__(self, port=5000):
            # Socket 설정
            self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
            # 네트워크에 연결된 다른 PC에서 접속하는 경우
            self.server_socket.bind(('0.0.0.0', port))
    
            # 로컬 PC에서 접속하는 경우
            # self.server_socket.bind(('localhost', port))
    
            self.server_socket.listen(1)

     

     

    실행 결과

    실행은 아래 비디오에 보이는 것처럼 잘 된다.

    1. 서버 (우측) PC에서 FFT Visualizer를 실행한다. FFT Visualizer는 소켓으로 통신 요청이 들어오기를 대기한다.
    2. 클라이언트 (좌측) PC에서 TSMaster 미니프로그램을 실행한다. 소켓 통신이 연결된다.  
    3. 클라이언트 PC에서 오프라인 리플레이 실행하여 FFT 계산을 시작한다. 서버 PC의 FFT Visualizer에 그래프가 출력된다.
    4. 클라이언트 PC의 미니프로그램을 종료한다. 클라이언트쪽 소켓 통신이 종료된다. 
    5. 서버의 FFT Visualizer를 종료한다. 서보쪽 소켓 통신이 종료된다.  

    pc to pc socket communication

     

     

    결론

    • Python의 socket 모듈을 이용하면, 소켓 통신을 이용하여 TSMaster의 미니프로그램(클라이언트)과 네트워크에 있는 다른 PC에서 동작하는 프로그램(서버) 사이에 데이터 전달을 몇 줄의 코드 구현할 수 있다.