서버(BackEnd) 프로그래밍

소정·2023년 3월 10일
0

php

목록 보기
1/3
post-thumbnail

서버를 사용하는 이유

핸드폰은 아이피가 유동적임 정보를 취득하기 위해 사용자의 앱에 접근하기 어려움 따라서 고정적인 아이피 주소를 가진 컴퓨터(서버) 하나를 두고 정보를 취득한다

[1] HTTP 통신

Hyper Text(HTML) Transper Protocol
데이터를 보내기 위한 약속

서버에 주소를 보내면 index로 가는데 서버 컴퓨터엔 서버만 있는 게 아니라 index를 요청하면 문서를 되돌려주는 프로그램을 웹서버프로그램이라고함
(대표 : 아파치)
아파치가 제일 먼저 쳐다보는 문서가 index임

아파치를 설치하면 접근 가능한 특별한 폴더가 생성되고 그 안에서만 데이터를 가져갈 수 있다

1. 호스팅 서버 임대해주는 업체에 내 호스팅 등록하기

아마존 등...
닷홈에 무료호스팅 가입하기

FTP 서버에 업로드 할 때 규약

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();

    }
}
profile
보조기억장치

0개의 댓글