안드로이드 클라이언트 소켓연결로 서버에 접속하기

안드로이드는 특성상 주로 서버에 접속하는 클라이언트 부분을 다루게 됩니다. 자바 클라이언트와 달리 쓰레드와 핸들러까지 처리를 해 줍니다. res의 xml 파일에서 버튼과 텍스트 뷰만 올려놓고, 버튼을 누르면 서버에 접속을 요청하도록 합니다.

서버에 접속을 요청함과 동시에 쓰레드가 돌아가고, 연결 부분은 자바 클라이언트의 코드를 그대로 가져다 쓰면 되지만 여기서는 localhost라고 하면 안되고, PC의 IP 주소를 명시해주어야 됩니다. 그리고, 메시지 부분은 핸들러가 담당합니다.

그리고 반드시 메니페스트 파일에 다음과 같이 퍼미션 처리를 꼭 해야 됩니다.

실행을 하면 서버는 이전과 같이 클라이언트 접속을 기다리다가 요청이 들어오면 메시지 처리를 하고 있습니다.

안드로이드 클라이언트가 실행된 모습. 에뮬레이터에서 서버인 PC쪽으로 접속이 잘 되었습니다.

스마트폰에서도 똑같이 실행된 모습입니다.

by 케찹만땅 | 2013/04/17 14:53 | JavaAndroid | 트랙백 | 덧글(4)

트랙백 주소 : http://wpkc.egloos.com/tb/5179630
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 별일없는 바다표범 at 2013/11/28 20:29
안녕하세요! 좋은 자료 잘 읽었습니다!^^
질문이 있는데, ConnectThread 클래스에서 handler와 textViewConnectStatus 변수가 선언되지 않았다고 에러가 뜹니다ㅠ
그래서 생성자를 따로 만들어서 액티비티에서 선언 시 액티비티에 있는 handler와 textViewConnectStatus 를 ConnectThread 내부에서 선언한 변수로 받게 했는데, 이경우 에러는 없어지는데 작동이 제대로 되지 않습니다. (textview가 그대로 있습니다.)
코드 어느부분이 잘못되서 이렇게 되는걸까요?
Commented by 케찹만땅 at 2013/11/28 21:16
먼저 확인차원에서요..

1. 서버는 자바로 실행되어 돌아가고 있겠죠,
2. import가 모두 제대로 되어 있을거구요,
3. 메니페스트 퍼미션 처리도 되었구요,
4. XML 파일을 작성하셨을거고 ^^

선행 작업이 끝났다면 저 코드 그대로 실행해서 이미지와 같은 결과가 나와야 됩니다만..

아! 어쩌면 onClickConnection(View view) 메써드 때문일 수도 있습니다.
이걸 쓰려면 XML 파일에서 버튼에 onClick 속성을 지정해야 됩니다.

android:onClick="onClickConnection"
Commented by 별일없는 바다표범 at 2013/11/29 19:21
답변 감사합니다 ^^
제가 에러가 나는 부분은

커넥션쓰레드의
handler.post(new Runnable(){
public void run(){
textViewConnectStatus.append(text+"n");
}
});
이 부분입니다. handler와 textViewConnectStatus에 'cannot be resolved 에러가 뜹니다.
제 생각에는 핸들러와 텍스트뷰가 커넥트쓰레드에서 선언되지 않아서 생긴 오류라고 생각해서,
다음과 같은 코드를 추가했었습니다.

Handler handler;
TextView textViewConnectStatus;
public ConnectThread(Handler handler,TextView textViewConnectStatus){
this.handler = handler;
this.textViewConnectStatus = textViewConnectStatus;
}

이렇게 하니 오류는 없어졌는데, 정작 버튼 클릭후에 아무런 변화도 생기지 않더군요 ㅠ
참, 이건 서버에 제대로 연결이 안되서 exception에 걸렸을 수도 있겠네요.

혹시 위의 코드 그대로 했을때 'cannot be resolved'에러가 뜨는게 제가 import를 빠뜨린게 있어서 그런건가요?
Commented by 케찹만땅 at 2013/11/29 19:54
그럴 수도 있습니다. 위 예문에는 import가 접혀 있기 때문에 안나와서 그렇지 실제론 여러개거든요.
import를 별도로 설명하지 않는 이유는 이클립스에 이 import를 자동으로 처리해 주는 기능이 있어서입니다. 한동안 안해서 기억이 가물한데 단축키가 Ctrl+O 인가 그렇습니다.
※ 로그인 사용자만 덧글을 남길 수 있습니다.

◀ 이전 페이지          다음 페이지 ▶