본문 바로가기

Android/Socket, Server Thread

Android Socket example

안드로이드에서 Socket을 사용하는 예 Part 02

서버측 코드 (Thread를 사용하여 다중접속에 대비한 예)

package com.example.socket.server; import java.io.*; import java.net.*; import java.util.*; public class ServerForAndroid { public static void main(String[] args) { ServerSocket serverSocket = null; int serverPort = 1234; try { serverSocket = new ServerSocket(serverPort); while(true) { System.out.println("접속대기 중......"); Socket socket = serverSocket.accept(); new ServerThread(socket).start(); } } catch (Exception e) { e.printStackTrace(); } } /* 서버용 쓰레드, 접속요청과 통신부분을 다른 쓰레드로 분리한다 */ static class ServerThread extends Thread { Socket socket; ObjectOutputStream objOut; ObjectInputStream objInput; ServerThread(Socket socket) { this.socket = socket; try{ objOut = new ObjectOutputStream(socket.getOutputStream()); objInput = new ObjectInputStream(socket.getInputStream()); }catch(Exception ex) { ex.printStackTrace(); } } public void run() { try{ String input = (String)objInput.readObject(); //System.out.println("접속확인됨"); String response = (input +":"+ new Date()); objOut.writeObject(response); objOut.flush(); }catch(Exception ex) { ex.printStackTrace(); } } } }


res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linearLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="TextView" /> </LinearLayout>


MainActivity.java (5초마다 서버측에 접속함)

package com.example.androidapp; import java.io.*; import java.net.*; import android.app.*; import android.content.*; import android.graphics.*; import android.os.*; import android.util.*; import android.view.*; import android.view.*; import android.view.View.*; import android.widget.*; public class MainActivity extends Activity { TextView tv; Handler handler = new Handler(); String response; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv = (TextView) findViewById(R.id.textView1); new Thread() { public void run() { while(true) { connect(); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } private void connect() { Socket socket = null; try{ socket = new Socket("211.183.3.200", 1234); ObjectOutputStream objOut = new ObjectOutputStream(socket.getOutputStream()); objOut.writeObject("time"); objOut.flush(); ObjectInputStream objInput = new ObjectInputStream(socket.getInputStream()); response = (String)objInput.readObject(); handler.post(new Runnable() { public void run() { tv.setText(response); } }); }catch(Exception ex) { Log.e("소켓접속오류", ex.getMessage()); } } }