Socket
Socket은 두 프로그램이 네트워크를 통해 서로 통신할 수 있도록 양쪽에 생성되는 링크의 단자입니다.
TCP/IP Socket
TCP는 두 프로그램 간 통신이 처음 시작될 때부터 끝날때까지 계속 연결을 유지하는 연결 지향(Connection oriented) 방식입니다.
- 스트림 소켓 방식
- 양쪽 어플리케이션 모두 데이터 주고 받기 가능
- 흐름 제어 등을 보장해주며 송신된 순서에 따른 중복되지 않은 데이터 수신 가능
- IP와 포트 번호로 소켓을 연결하면 통신이 시작
- byte 자료형으로 데이터 전송
TCP Client 구현
1. Socket에 서버 IP와 port 번호를 적어 객체를 생성하고 서버와 연결을 합니다.
val socket = Socket("10.0.2.2", 8080)
2. 연결이 성공되었다면 OutputStream에 전송할 데이터를 담아 보내고 InputStream을 통해 데이터를 읽어옵니다.
val printer = PrintWriter(socket.getOutputStream())
printer.println("GET / HTTP/1.1")
printer.println("Host: 127.0.0.1:8080")
printer.println("User-Agent: android")
printer.println("\r\n")
printer.flush()
val reader = BufferedReader(InputStreamReader(socket.getInputStream()))
var input: String? = "-1"
while (input != null) {
input = reader.readLine()
Log.e("Data : ", "$input")
}
3. 사용이 끝나면 close()로 소켓을 닫습니다.
printer.close()
reader.close()
socket.close()
TCP Server 구현
1. ServerSocket에 port 번호를 넣어 객체를 생성합니다.
val port = 8080
val server = ServerSocket(port)
2. 반복문을 시작해 accept() 함수를 통해 클라이언트부터 데이터가 오길 기다립니다.
while (true) {
val socket = server.accept()
// ...
}
3. 데이터가 수신되었다면 InputStream을 통해 데이터를 읽어오고 OutputStream에 다시 데이터를 작성한 뒤 flush()를 통해 버퍼에 담긴 정보를 전송합니다.
val reader = BufferedReader(InputStreamReader(socket.getInputStream()))
var input: String? = "-1"
while (input != null && input != "") {
input = reader.readLine()
println("READ DATA : $input")
}
val printer = PrintWriter(socket.getOutputStream())
// HEADER
printer.println("HTTP/1.1 200 OK")
printer.println("Content-Type: text/html\r\n")
// BODY
printer.println("{\"message\": \"Hello World\"}")
printer.println("\r\n")
printer.flush()
4. 사용이 끝나면 close()로 소켓을 닫습니다.
reader.close()
printer.close()
socket.close()
728x90
반응형
'안드로이드 > 활용' 카테고리의 다른 글
[Android] Retrofit 사용하기 (0) | 2023.08.18 |
---|---|
[Android] HttpUrlConnection과 OkHttp (0) | 2023.08.18 |
[Android] MediaPlayer와 MediaRecoder (0) | 2023.08.02 |
[Android] ViewPager2 사용하기 (0) | 2023.07.31 |
[Android] ListAdapter로 RecyclerView 효율적으로 사용하기 (0) | 2023.07.27 |