마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 누가 버전 tcp 소켓 통신 문의 드립니다.

0 추천

지금 이클립스, 안드로이드 스튜디오 2가지 개발환경에서 테스트 중입니다. 그런데 안드로이드 누가가 아닌 버전에서는 정상 동작 하는데 누가 버전에서만 tcp 소켓 통신 중 mmOutStream.write(buffer)에서 에러가 납니다.

누가 버전에서는 주의해야 할 점이 있는지... 아니면 다른 필요한것이 있는지 궁금합니다.

 

아래 순서대로 오버로딩 합니다. 마지막에는 outStream.write로 다른 디바이스로 tcp 데이터를 보냅니다.

mWorksCommControl.sendArrayCommand(buffer);
mWiFiService.SendArrayCommand(buffer);
r.writeA(buffer);
mmOutStream.write(buffer);
안드롭초보 (530 포인트) 님이 2016년 12월 7일 질문
동일한 문제로 고생중입니다.
혹시 해결하셨는지요?

2개의 답변

0 추천

누가 버젼이라고 특별히 달라진 점은 없습니다.

네트워크 사용권한을 마쉬멜로 부턴 AndroidManfest.xml 파일에 추가해 주던데서,  Runtime Permission을 얻도록 변경되었는데, 이 문제가 아닌지 확인 해 보세요.

익명사용자 님이 2016년 12월 7일 답변
0 추천

https://developer.android.com/about/versions/nougat/android-7.0.html

"이전 버전의 Android에서는 버그 때문에, 시스템이 주 스레드에서 TCP 소켓에 대한 쓰기를 엄격 모드 위반으로서 플래그하지 못했습니다. Android 7.0에서는 이 버그가 수정되었습니다. 이 동작을 보이는 앱에서는 이제 android.os.NetworkOnMainThreadException이 발생합니다. 일반적으로, 메인 스레드에서 네트워크 작업을 수행하면 대개 테일 지연 시간이 길어져 ANR 및 버벅거림을 유발하므로, 이런 작업은 수행하지 않는 것이 좋습니다."

 메인스레드에서 네트워크 작업을 수행한 것으로 보입니다. 로그 찍어보시면 아마 android.os.NetworkOnMainThreadException 이 발생하고 있을것 같구요. 쓰레드 혹은 핸들러로 처리하시면 해결 될 것으로 생각됩니다.

쭈삐 님이 2017년 6월 19일 답변
...