핸드폰은 아이피가 유동적임 정보를 취득하기 위해 사용자의 앱에 접근하기 어려움 따라서 고정적인 아이피 주소를 가진 컴퓨터(서버) 하나를 두고 정보를 취득한다
Hyper Text(HTML) Transper Protocol
데이터를 보내기 위한 약속
서버에 주소를 보내면 index로 가는데 서버 컴퓨터엔 서버만 있는 게 아니라 index를 요청하면 문서를 되돌려주는 프로그램을 웹서버프로그램이라고함
(대표 : 아파치)
아파치가 제일 먼저 쳐다보는 문서가 index임
아파치를 설치하면 접근 가능한 특별한 폴더가 생성되고 그 안에서만 데이터를 가져갈 수 있다
아마존 등...
닷홈에 무료호스팅 가입하기
FTP중 filezilla 다운 (putty 써봄)
https://filezilla-project.org/download.php?type=client#close
내 호스팅 서버 연결하기
이 폴더만 아파치가 읽어갈 수 있음 꼭 여기에 써야함
VS code에서 브라우저로 빠르게 열기
package com.bsj0420.ex81webservice;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import com.bsj0420.ex81webservice.databinding.ActivityMainBinding;
import com.bumptech.glide.Glide;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
//activity_main.xml 문서와 연결되어 뷰들을 제어할 수 있도록 설계된
//Binding 클래스 참조변수
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
binding = ActivityMainBinding.inflate(getLayoutInflater()); //xml 불러오기
setContentView(binding.getRoot()); //연결해주기
binding.btn.setOnClickListener(view -> clickBtn());
binding.btn2.setOnClickListener(view -> clickBtn2());
}
private void clickBtn2() {
//웹서버의 이미지 읽어오기 - 스레드 스트림 이용해야함 (원래 방법)
new Thread(){
@Override
public void run() {
String address="http://mrhisj23.dothome.co.kr/moana01.jpg";
try {
URL url = new URL(address);
InputStream is = url.openStream();
Bitmap bm = BitmapFactory.decodeStream(is);
runOnUiThread(()->{
binding.iv.setImageBitmap(bm);
});
} catch (MalformedURLException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}.start();
//이미지 로드 라이브러리 : Glide
// String address="http://mrhisj23.dothome.co.kr/moana01.jpg";
// Glide.with(this).load(address).into(binding.iv);
}
private void clickBtn() {
// 웹 서버에 접속하여 index.html 문서를 읽어와서
// TextView에 보여주기
// 스트림 필요~!
//인터넷 써야하니까 퍼미션 받기 - http니까 usesCleartextTraffic 얘도
//네트워크 작업이 => 별도의 스레드 필요
Thread t= new Thread(){
@Override
public void run() {
//서버 접속
String address="http://mrhisj23.dothome.co.kr/";
// 해임달(문 열어주는 애 = url) / 무지개 로드 = 스트림
try {
URL url = new URL(address);
InputStream is = url.openStream(); //바이트 스트림
InputStreamReader isr = new InputStreamReader(is); //문자(한글자씩 줌) 스트림으로 변환
BufferedReader reader = new BufferedReader(isr); //문장으로 읽어오는 보조 문자 스트림으로 변환
StringBuffer buffer = new StringBuffer();
while (true) {
String line = reader.readLine();
if(line ==null) break;
buffer.append(line + "\n");
}
//텍스트뷰 찾아오기
runOnUiThread(new Runnable() {
@Override
public void run() {
binding.tv.setText(buffer.toString());
}
});
} catch (MalformedURLException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
};
t.start();
}
}