지난 시간에 파이썬으로 서버를 프로그래밍 했다
2021/01/28 - [프로그래밍/Python] - 파이썬 소켓 프로그래밍 / 서버 프로그래밍 #1
이번에는 이 서버에 접속하기 위해 안드로이드에서 클라이언트 프로그래밍을 해보겠다
package com.example.connect;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
public class MainActivity extends AppCompatActivity {
private static final String host = "192.168.1.4";
private static final int port = 8080;
private Socket s;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
s = new Socket();
InetSocketAddress addr = new InetSocketAddress(host, port);
try {
s.connect(addr);
} catch (IOException e) {
e.printStackTrace();
}
}
}
host는 서버의 ip주소이고, port는 서버에서 개방한 port 번호를 사용한다
먼저 소켓 생성을 하고 주소 객체 addr을 생성하여 host, port를 할당한다
그리고 connect 메소드로 주소에 연결하면 된당
아니 이게 뭐시여. 되지 않는다
서버가 계속 listening 상태이다
뭐가 문제인가 로그캣을 확인해보았다.
자세한건 모르겠고 에러가 나타나기 시작한 부분을 살펴보니 socket failed, operation not permitted라고 나온다
operation이라고 하면 connect에서 발생한 것 같고 이게 허용되지 않아서 소켓 연결이 실패했다 그런 뜻인듯
그래서 구글링 해보니 소켓은 인터넷을 이용한 연결 방법인데 인터넷 연결을 허용하지 않아서 그렇다고 한다
따라서 manifest에 인터넷 사용 권한을 허용해주면 된당
<uses-permission android:name="android.permission.INTERNET"/>
위의 코드를 AndroidManifest.xml에 추가하면 된다
※ AndroidManifest.xml 파일을 수정하고 나서는 앱을 삭제한 후 다시 설치해야 합니다 ※
이제 앱을 삭제하고 다시 실행하면!
힝 속았징?
또 안된다 이번엔 무슨 일인가 뭔말인지도 모르겠는 로그캣을 내려보면서 확인했더니
NetworkOnMainThreadException이란다. 저기서 문제가 발생한 것 같다
또 구글링 해보니 메인 쓰레드에서 네트워크 통신 처리를 하려고 하면 발생하는 오류라고 한다
API level 13(Android 3.0)부터 이렇게 패치가 되었다고 한다
그렇다면 메인 쓰레드가 아니라 다른 쓰레드에서 처리를 해야할 것 같다.
'프로그래밍 > Android Java' 카테고리의 다른 글
안드로이드 소켓 프로그래밍 / 클라이언트 - 서버 접속 #2 (0) | 2021.01.31 |
---|---|
안드로이드 프로그래밍 / 멀티쓰레드 #1 (0) | 2021.01.31 |