캡스톤_졸업작품2019. 6. 21. 15:02

이정민 팀원과 같이 만들었습니다.https://jeongmin-lee.tistory.com/63

 

⑦ TCP 통신

TCP 통신 Server는 Python으로 Client는 JAVA로 작성합니다. TCP통신 Client_JAVA 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 32 33 34 35 36 37 38 39 40 41 42 43..

jeongmin-lee.tistory.com

 

캡스톤2을 진행하면서 드론의 영상과 gps 데이터를 서버컴퓨터로 전송해야했습니다.

 

드론으로 dji spark 드론을 사용했습니다. spark 드론은 mobile sdk 만 지원했고 그에 맞춰서 java pthon 두 언어로 통신하는 코드를 만들었습니다.

 

 

java 를 client 로 python 을 sever 로 두고 만들었습니다.

 

server code

python 으로 만든 서버 코드입니다. 

 

소켓을 생성한 뒤 bind 부분에 ip와 포트번호를 넣어주고 listen 을 통해 몇 개의 연결을 대기시킬지 정하면 우리가 원하는 서버 소켓이 정의됩니다.

 

 

그런 다음 accept 를 하면 client에 연결 요청이 오기 전까지 대기상태가 됩니다. client 에 연결요청을 받으면 첫번째로 동영상을 받고 두번째로 gps 텍스트파일을 받습니다.

 

동영상은 용량이 커서 한번에 받을 수 없으므로 python 문법인 while else 문을 사용해서 소켓 버퍼에 데이터가 비워지는 시점까지 파일을 받습니다.

 

파일을 다 받으면 동영상을 opencv 를 통해 frame 단위로 잘라주고 dakent에 yolo 모델에 fit해서 이상이 있는 식물을 찾아냅니다.

 

client code

다음은 안드로이드 환경 java 로 짜여진 client code 입니다. 먼저 파일 통신을 하기 위해 외부저장소를 읽는 권한이 있는지 확인하고 특정 버튼을 누르면 파일통신이 진행되도록 했습니다.

 

서버 주소와 포트번호를 입력하게 만들었고 입력받은 정보를 통해 소켓을 만듭니다.

 

특정 디렉토리에 있는 파일의 리스트를 가져와서 inputstream 에 파일을 outputstream 에 서버를 연결해주고 write 를 하게 되면 파일이 보내집니다. 저 형식을 통해서 첫 번째로는 동영상 파일을 두 번째로는 드론 ps 텍스트 데이터를 전송했습니다.

 

여기서 주의할점이 catch를 통해서 사용자에게 오류가 났을 경우 toast 를 보내는 코드를 넣으면 오류가 납니다. 찾아보니까 메인쓰레드가 아닌 곳에서 toast 를 보낼 경우 오류가 나기 때문에 다른 방법을 통해서 보내야한다고 합니다. 

 

인터넷에 다른 언어들끼리 tcp통신하는 예제가 많이 보이지 않았습니다. 따라서 많은 시행착오를 거쳤습니다. 언어가 달라도 규격만 지켜주면 다른 언어와 환경에서 tcp 통신이 가능합니다.

 

Posted by richcherry