PowerSH / HackerTrain

0 stars 0 forks source link

안드로이드 소켓통신 클라이언트 #6

Closed dding-g closed 2 years ago

dding-g commented 5 years ago

-android 클라이언트 .java-

package com.example.android_client; //패키지는 본인 것으로 수정하셔요

import java.io.BufferedReader; //우와 많다 ㅎㅎ.. import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket;

import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView;

public class MainActivity extends Activity { //메인 activity 시작!

private Socket socket; //소켓생성 BufferedReader in; //서버로부터 온 데이터를 읽는다. PrintWriter out; //서버에 데이터를 전송한다. EditText input; //화면구성 Button button; //화면구성 TextView output; //화면구성 String data; //

@Override protected void onCreate(Bundle savedInstanceState) { //앱 시작시 초기화설정 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //start input = (EditText) findViewById(R.id.input); // 글자입력칸을 찾는다. button = (Button) findViewById(R.id.button); // 버튼을 찾는다. output = (TextView) findViewById(R.id.output); // 글자출력칸을 찾는다. // 버튼을 누르는 이벤트 발생, 이벤트 제어문이기 때문에 이벤트 발생 때마다 발동된다. 시스템이 처리하는 부분이 무한루프문에 //있더라도 이벤트가 발생하면 자동으로 실행된다. button.setOnClickListener(new OnClickListener() { public void onClick(View v) { //버튼이 클릭되면 소켓에 데이터를 출력한다. String data = input.getText().toString(); //글자입력칸에 있는 글자를 String 형태로 받아서 data에 저장 Log.w("NETWORK", " " + data); if (data != null) { //만약 데이타가 아무것도 입력된 것이 아니라면 out.println(data); //data를 stream 형태로 변형하여 전송. 변환내용은 쓰레드에 담겨 있다. } } });

Thread worker = new Thread() { //worker 를 Thread 로 생성 public void run() { //스레드 실행구문 try { //소켓을 생성하고 입출력 스트립을 소켓에 연결한다. socket = new Socket("210.119.104.202", 5555); //소켓생성 out = new PrintWriter(socket.getOutputStream(), true); //데이터를 전송시 stream 형태로 변환하여 //전송한다. in = new BufferedReader(new InputStreamReader( socket.getInputStream())); //데이터 수신시 stream을 받아들인다.

} catch (IOException e) { e.printStackTrace(); }

//소켓에서 데이터를 읽어서 화면에 표시한다. try { while (true) { data = in.readLine(); // in으로 받은 데이타를 String 형태로 읽어 data 에 저장 output.post(new Runnable() { public void run() { output.setText(data); //글자출력칸에 서버가 보낸 메시지를 받는다. } }); } } catch (Exception e) { } } }; worker.start(); //onResume()에서 실행. }

@Override protected void onStop() { //앱 종료시 super.onStop(); try { socket.close(); //소켓을 닫는다. } catch (IOException e) { e.printStackTrace(); } }

}

출처 https://m.blog.naver.com/PostView.nhn?blogId=wndrlf2003&logNo=70171460317&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2