[Android/Kotlin] 네트워크 - HTTP 네트워크

SoyoungLee·2021년 9월 27일
0

안드로이드/코틀린

목록 보기
18/68
post-thumbnail

💌 [안드로이드/코틀린] 네트워크 - HTTP 네트워크

💜 HTTP 네트워크

  • Hyper Text Translation Protocol 의 약자
    인터넷 상에 데이터를 송수신할 수 있는 국제 표준 규격
  • 일반적으로 웹 브라우저가 사용하는 통신 방식 중 하나
  • 최초엔 문자열 데이터 주고 받기 위한 목적 -> 현재 다양한 데이터를 송수신

🤍 장점

  • 클라이언트 요청이 발생 시 서버가 데이터를 보내주는 방식으로 한번 송수신 후 연결 해제
  • 온라인으로 유지되지 않아 서버 부담을 덜어 줌
  • 이미 잘 만들어진 서버를 이용해 구현도 쉬움

🤍 단점

  • 온라인으로 유지되지 않아 자유로운 통신 기능 구현 어려움
    Socket 네트워크은 온라인 유지됨
    -> 현재 웹 소켓 방식으로 온라인 유지 가능
  • WAS 개발 기술 있어야 함 (JSP, ASP, PHP 등)

👉 안드로이드 9.0 이상

  • http 프로토콜을 통한 접속 기본 차단
  • 해결 방법 : AndoroidManifest.xml 파일에 다음과 같은 속성 추가
android:usesCleartextTraffic="true"

1. Tomcat 9 Software Downloads

http://tomcat.apache.org/

다운로드 후 압축 풀고 로컬 디스크 (C:)로 이동
-> 서버 실행은 bin 폴더에서

2. 서버 가동

cmd 열고 'cd bin폴더경로' enter

'startup' enter

http://localhost:8080/
냥이 뜨면 성공

📌 설정 > 시스템 > 정보 > 고급 시스템 설정 > JAVA_HOME 환경 변수 설정 필수

필요한 파일들 다 ROOT 폴더안에 넣기

3. Android New Project

Manifest에 추가

<application
        ...
        android:usesCleartextTraffic="true">
</application>  
...
<uses-permission android:name="android.permission.INTERNET"/>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="서버 접속" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

</LinearLayout>

MainActivity.kt

package com.example.httpnetwork

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.httpnetwork.databinding.ActivityMainBinding
import java.io.BufferedReader
import java.io.InputStream
import java.io.InputStreamReader
import java.net.HttpURLConnection
import java.net.URL
import kotlin.concurrent.thread


class MainActivity : AppCompatActivity() {
    private var _binding: ActivityMainBinding? = null
    private val binding get() = _binding!!

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        _binding = ActivityMainBinding.inflate(layoutInflater)

        binding.button.setOnClickListener {
            thread {
                // 접속할 주소
                val site = "http://172.30.1.47:8080/basic.jsp"
                val url = URL(site)

                // 접속
                val conn = url.openConnection() as HttpURLConnection
                val isr = InputStreamReader(conn.inputStream, "UTF-8")
                val br = BufferedReader(isr)

                var str: String? = null
                val buf = StringBuffer()

                do {
                    str = br.readLine()
                    if (str != null) {
                        buf.append("$str/n")
                    }
                } while (str != null)

                runOnUiThread {
                    binding.textView.text = buf.toString()
                }

            }
        }

    }
}
profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻

0개의 댓글