[kotlin] 안드로이드 Socket 설정

Leechaeyeon·2023년 7월 18일
0

코틀린 안드로이드

목록 보기
15/21
post-thumbnail

인텔리제이로 코틀린 파일 만들기

import java.net.ServerSocket

fun main(){
    // 사용할 포트번호
    var portNumber = 55555
    // 서버 객체를 생성한다.
    val serverSocket = ServerSocket(portNumber)
    // 사용자 접속을 대기한다.
    val socket = serverSocket.accept()
    println()

    socket.close()
    serverSocket.close()

}

Mainfest.xml

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

android_mainActivty.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:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:text="TextView" />
</LinearLayout>
  • 안드로이드는 모든 네트워크 코드는 쓰레드로 운영해야 한다.
  • 네트워크 특히 모바일은 통신에 문제가 발생할 가능성이 높기 때문에
  • 오류 발생시 안드로이드 애플리케이션 자체가 종료되는 것을 예방하기 위함

ipconfig 설정해서 하는 것

  • ipconfig를 통해 ipv4를 찾아서 입력
package com.test.android91_socketclient

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.test.android91_socketclient.databinding.ActivityMainBinding
import java.net.Socket
import kotlin.concurrent.thread

class MainActivity : AppCompatActivity() {
    lateinit var activityMainBinding: ActivityMainBinding

    val SERVER_IP ="192.168.0.22"
    val SERVER_PORT = 55555
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(activityMainBinding.root)

        activityMainBinding.run {
            button.setOnClickListener {
                thread {
                    // 소캣 객체를 생성한다.
                    val socket = Socket(SERVER_IP,SERVER_PORT)

                    runOnUiThread{
                        textView.text = socket.toString()
                    }
                    socket.close()
                }
            }
        }
    }
}


인텔리제이 서버파일 수정

 // 클라이언트에게 데이터를 전달한다.
    dataOutputStream.writeInt(100)
    dataOutputStream.writeDouble(11.11)
    dataOutputStream.writeBoolean(true)
    dataOutputStream.writeUTF("서버가 보낸 문자열")

    // 클라이언트에게 데이터를 수신 받는다.
    val data1 = dataInputStream.readInt()
    val data2 = dataInputStream.readDouble()
    val data3 = dataInputStream.readBoolean()
    val data4 = dataInputStream.readUTF()

    println("data1 : $data1")
    println("data2 : $data2")
    println("data3 : $data3")
    println("data4 : $data4")

안드로이드 파일 수정

activityMainBinding.run {
            button.setOnClickListener {
                thread {
                    // 소캣 객체를 생성한다.
                    val socket = Socket(SERVER_IP,SERVER_PORT)

                    // 스트림을 추출한다.
                    val inputStream = socket.getInputStream()
                    val outputStream = socket.getOutputStream()

                    val dataInputStream = DataInputStream(inputStream)
                    val dataOutputStream = DataOutputStream(outputStream)

                    // 서버로 부터 데이터를 수신 받는다.
                    val data1 = dataInputStream.readInt()
                    val data2 = dataInputStream.readDouble()
                    val data3 = dataInputStream.readBoolean()
                    val data4 = dataInputStream.readUTF()

                    // 서버에게 데이터를 전달한다.
                    dataOutputStream.writeInt(200)
                    dataOutputStream.writeDouble(22.22)
                    dataOutputStream.writeBoolean(false)
                    dataOutputStream.writeUTF("클라이언트가 보낸 문자열")

                    runOnUiThread{
                        //textView.text = socket.toString()
                        textView.text = "data1 : ${data1}\n"
                        textView.append("data2 : ${data2}\n")
                        textView.append("data3 : ${data3}\n")
                        textView.append("data4 : ${data4}\n")
                    }
                    socket.close()
                }
            }


2개의 댓글

comment-user-thumbnail
2023년 7월 18일

훌륭한 글이네요. 감사합니다.

답글 달기
comment-user-thumbnail
2023년 7월 18일

정말 잘 읽었습니다, 고맙습니다!

답글 달기

관련 채용 정보