TCP 통신할 때 라즈베리파이와, PC 속도 차이때문에 고민입니다...

조회수 2335회

라즈베리파이(클라이언트)와 PC(서버)를 이용하여 TCP통신을 하고있습니다.

현재 보내는 데이터는 카메라로 촬영한 사진파일을 byte로 변경하여 보내며, 이를 서버에서 buffed image로 변경시켜 화면에 띄어주고 있습니다.

하지만, PC(노트북)에서 서버를 열고 PC(노트북)에서 클라이언트 코드를 실행시키면 속도에는 문제가 없습니다. => 초당 15프레임 정도 나옴.

하지만 PC(노트북)의 서버를 열고 클라이언트를 라즈베리파이(외부기기)에서 실행시키면 속도차가 너무도 심합니다. => 초당 1.5~2프레임 정도 나옴.

이를 어떻게 해결하면 될까요?

< 현재 프로그램의 조건들 >

  1. 서버와 클라이언트는 둘다 Java 언어로 만들어져 있습니다.
  2. Java언어기 때문에 라즈베리파이의 터미널에서도 잘 돌아가며, 코드는 동일함.
  3. 클라이언트에서는 초당15프레임 (1초에 15장)으로 사진을 전송합니다. -> like 동영상
  4. 서버와 클라이언트는 Wifi를 통한 무선통신을 합니다.
  5. 서버는 웹을 사용하지 않고, 응용 프로그램으로 만듭니다.
  6. 클라이언트에서 OpenCv를 이용하여 Mat객체를 byte로 변경시켜 서버에서 이미지로 변환합니다.
  7. 혹시나 Endian(엔디안) 문제인가 싶어서 실험해봤지만 PC, 라즈베리파이 둘 다 Little로 동일했습니다.

해결법이 없는 단순 성능차이라면 어쩔수없을듯 하구요..... 그게아니라면....

멘토님들, 고수님들 의견좀 부탁드릴게요~~~!

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • WiFi 이론적인 속도 확인

    먼저 WiFi가 어떻게 연결되어 있는지 확인하여(IEEE 802.11a, b, g, n) 그에 맞는 이론적인 속도가 얼마나 되는지 확인합니다. 라즈베리파이에 달린 WiFi모듈이 지원하는 최대 속도를 낼 수 있는 설정되어 있는 확인합니다.

    실제 통신속도 측정하여 WiFi 이론적인 속도와 비교

    실제 통신 속도를 측정하여 위의 이론적인 속도와 얼마나 나는지 확인해 봅니다.

    큰 차이가 없다면

    실제 데이터를 압축하시나요? OpenCV를 사용하시는 걸로 봐서 그럴것으로 추정되나 만약 그렇지 않다면, 압축하여 전송효율을 최대한 끌어 올릴 필요가 있습니다.

    차이가 많이 난다면

    소켓 통신 쪽 코드를 리뷰해 볼 필요가 있습니다. TCP_NODELAY과 같은 소켓 옵션

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)