프로그래밍/Android Java

안드로이드 소켓 프로그래밍 / 클라이언트 - 서버 접속 #2

배기니어 2021. 1. 31. 15:43

앞서 프로그래밍했던 클라이언트 소켓은 메인쓰레드에서 서버에 연결을 시도했기 때문에 에러가 발생했다.

그래서 이번에는 쓰레드를 생성하여 접속을 시도하는 방법을 적용해보자.

 

- 지난글

2021/01/29 - [프로그래밍/Android Java] - 안드로이드 소켓 프로그래밍 / 클라이언트 프로그래밍 #1

 

안드로이드 소켓 프로그래밍 / 클라이언트 프로그래밍 #1

지난 시간에 파이썬으로 서버를 프로그래밍 했다 2021/01/28 - [프로그래밍/Python] - 파이썬 소켓 프로그래밍 / 서버 프로그래밍 #1 파이썬 소켓 프로그래밍 / 1. 서버 프로그래밍 #1 첫 번째 프로젝트

bagineer.tistory.com

2021/01/31 - [프로그래밍/Android Java] - 안드로이드 프로그래밍 / 멀티쓰레드 #1

 

안드로이드 프로그래밍 / 멀티쓰레드 #1

지난 프로그래밍에서 안드로이드 디바이스가 소켓을 생성하는 과정에서 문제가 발생했다. 지난 글 참고 2021/01/29 - [프로그래밍/Android Java] - 안드로이드 소켓 프로그래밍 / 클라이언트 프로그래

bagineer.tistory.com

 

간단한 코드만 추가했으니 설명도 간단히~

onCreate에서는 소켓과 주소 객체만 생성하고 쓰레드에 주소 객체를 전달하여 생성한 소켓이 서버에 연결할 수 있도록 한다.

지난번에 작성한 코드에서 connect 부분만 쓰레드 안에 넣어주면 된다.

 

MainActivity.java

package com.example.connect;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;

public class MainActivity extends AppCompatActivity {

    private static final String host = "192.168.1.4";
    private static final int port = 8080;

    private Socket s;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        s = new Socket();
        InetSocketAddress addr = new InetSocketAddress(host, port);
        MyThread thread = new MyThread(addr);
        thread.setDaemon(true);
        thread.start();
    }

    class MyThread extends Thread {

        InetSocketAddress addr;

        public MyThread(InetSocketAddress address) {
            addr = address;
        }

        @Override
        public void run() {
            try {
                s.connect(addr);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

이제 코드를 실행하면!

 

성공!

 

연결되었다!

이제 데이터 파트의 인터페이스를 구현하면 된다