안드로이드스튜디오를 통해 서버와 소켓통신이 가능한 앱을 구상인데

android.os.Networkonmainthreadexception에러 때문에 진행이 안됩니다ㅠㅠ

private String getResponse(String request)  {

        Intent intent = getIntent();
        String ipAddress = intent.getStringExtra("IP");
        int port = intent.getIntExtra("PORT", 0);
        try {
            Socket socket = new Socket(ipAddress, port)//SPECIAL_IP_TO_HOST_COMPUTER, PORT_NUMBER
            OutputStream output = socket.getOutputStream();
            output.write((request + "\n").getBytes());
            output.flush();
            BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String response = input.readLine();
            socket.close();
            return response;
        } catch (IOException ex) {
            Log.e("SHIT", ex.toString());
            return ex.toString();
        } catch (Exception ex) {
            Log.e("SHIT", ex.toString());
            return ex.toString();
        }
}

소켓을 생성하고 데이터를 주고받는 이 부분을 Thread나 AsyncTask를 사용하면 해결된다는데 안드로이드 스튜디오 초보자라서 어떤식으로 수정해야할지 예제를 봐도 잘 모르겠내요;; 어떻게 고쳐야할지 알려주시면 정말 감사하겠습니다..

아래는 전체 소스코드입니다.

package com.example.bman.mousecontrollclientsimple;

import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class ButtonControlActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button_control);

        Intent intent = getIntent();
        String ipAddress = intent.getStringExtra("IP");
        int port = intent.getIntExtra("PORT",0);

if(ipAddress != null) {
    TextView IpPort = (TextView) findViewById(R.id.IpPort);
    IpPort.setText(ipAddress + " : " + port);
}

    }

    public void buttonLeft(View view) {

        String request = "mouseMove 10 0";
        Log.d("MINE", "request: " + request);

        RequestResponseTask task = new RequestResponseTask();//
        task.execute(request);//

        String response = getResponse(request);

        TextView error = (TextView) findViewById(R.id.error);
        error.setText(response);
    }
    
    public void buttonClick(View view) {

        String request = "mouse1Click";
        Log.d("MINE", "request: " + request);

        RequestResponseTask task = new RequestResponseTask();//
        task.execute(request);//

        String response = getResponse(request);

        TextView error = (TextView) findViewById(R.id.error);
        error.setText(response);
    }
    
    private class RequestResponseTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... request) {
            Log.d("TASK", "request: " + request[0]);
            return getResponse(request[0]);
        }
        @Override
        protected void onPostExecute(String response) {
            Log.d("TASK", "response: " + response);
            TextView error = (TextView) findViewById(R.id.error);
            error.setText(response);
        }
    }

        private String getResponse(String request)  {

            Intent intent = getIntent();
            String ipAddress = intent.getStringExtra("IP");
            int port = intent.getIntExtra("PORT", 0);
            try {
                Socket socket = new Socket(ipAddress, port);//SPECIAL_IP_TO_HOST_COMPUTER, PORT_NUMBER
                OutputStream output = socket.getOutputStream();
                output.write((request + "\n").getBytes());
                output.flush();
                BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String response = input.readLine();
                socket.close();
                return response;
            } catch (IOException ex) {
                Log.e("SHIT", ex.toString());
                return ex.toString();
            } catch (Exception ex) {
                Log.e("SHIT", ex.toString());
                return ex.toString();
            }
    }
}