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

안드로이드에서 socketchannel 어떻게 사용해야되나요?

0 추천

 

sc = SocketChannel.open(new InetSocketAddress(HOST, PORT));
sc.configureBlocking(false);

이클립스에서는 저코드로 연결되서 안드로이드에서 소켓처럼 스레드돌리고 연결하면 될줄알았는데 

스레드안에 저렇게 넣어도 연결이 안되고 시간지난뒤에

java.net.ConnetctExcetption: Connection timed out 라고 뜨더라구요ㅠㅠ

혹시해서 소켓으로 연결해봤는데 소켓만연결하는건 됩니다

 

stylezer (120 포인트) 님이 2017년 1월 31일 질문
이상하네요... 그냥 소켓연결이 되는 환경에서 SocketChannel 연결이 안될 이유는 없는데
각각 peer의 혹시 네트워크 환경이 어떻게 되는지 댓글로 남겨주실수 있나요?
각각per라는 말이 무슨말인지는 잘모르겠지만 에뮬로 돌려서 하고있습니다
localhost로 안되서 ip써서 접속하려고 하고있습니다
그럼 서버는 질문자님 PC이고 에뮬레이터에서 PC로 커넥트 하는건데 그게 안된다는건가요? 근데 일반 소켓으로 하면 되시는거??
네 일반소켓으로 하면 연결됩니다
이유를 찾았네요.. 이클립스에서 localhost로하고 안드로이드에서만 아이피 입력했는데 소켓은 연결이되고 소켓채널이용할떈 자기아이피를 정확하게 써넣어야지 연결이 되네요 ... 이것떄문에 몇시간동안 해맸는데 ㅠㅠ
이클립스에서 아이피써서 연결했을때되서 이런문제인지는 몰랐습니다
구체적인 도움이 되어 드리지 못해 죄송합니다만 아래 링크에 있는 코드와 비교하여 확인 해보시기 바랍니다. 개인적인 생각으로는 SocketChannel도 non-block 소켓일뿐 로우레벨 프로토콜은 일반적인 TCP와 다를바가 없을것인데 뭔가 설정상의 문제가 있는거 같네요.

http://greenday96.blogspot.kr/2015/12/tcp-android-nonblocking-socket-tcp.html
답변감사드립니다 이클립스서버에서 localhost로 해놔서 연결이 안되던거였어요
같은 이클립스에서 소켓채널로 연결할떄는 클라이언트에서만 아이피를 입력했을떄도 연결이됬는데 에뮬에서 아이피입력해도 연결이 안됬는데  서버에서 ip를 직접 써넣으니 되네요

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...