package ceres.service; import android.content.Context; import android.os.Handler; import android.os.Message; import android.util.Log; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class MyTCPServer { private static final String TAG = "TCPServer"; private static int PORT = 4002; private static MyTCPServer mMyTCPServer; private TCPServerThread mServerThread; private Context mContext; private BufferedReader mInputBuffer; private BufferedWriter mOutputBuffer; private Handler mHandler; public MyTCPServer(Context context, Handler handler) { mContext = context; mHandler = handler; Log.d(TAG, "MyTCPServer: "); } public static MyTCPServer getInstance(Context context, Handler handler) { Log.d(TAG, "getInstance: "); if (mMyTCPServer == null) { Log.d(TAG, "getInstance: 1"); mMyTCPServer = new MyTCPServer(context, handler); } return mMyTCPServer; } public void start() { if (mServerThread == null) { Log.d(TAG, "start(): "); mServerThread = new TCPServerThread(); mServerThread.start(); } } class TCPServerThread extends Thread { private Boolean working; private ServerSocket mServerSocket; private Socket client; private String clientIP; DataOutputStream output; DataInputStream input; public TCPServerThread() { working = true; } @Override public void run() { Thread.currentThread().setName("MyTCPServer"); try { //ServerSocketFactory factory = SSLServerSocketFactory.getDefault(); //mServerSocket = factory.createServerSocket(PORT); Log.d(TAG, "TCPServerThread(): "); mServerSocket = new ServerSocket(PORT); while(working) { Log.d(TAG, "TCPServerThread(): 1"); // 리스닝 client = mServerSocket.accept(); // Listens for a connection to be made to this socket and accepts it. clientIP = client.getInetAddress().getHostAddress(); mOutputBuffer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())); mInputBuffer = new BufferedReader(new InputStreamReader(client.getInputStream()), 10); String data; while (! client.isClosed()) { //Log.d(TAG, "TCPServerThread(): 2"); if ((data = mInputBuffer.readLine()) != null) { Log.d(TAG, "read: " + data); if (data.equals("HEY")) { mOutputBuffer.write("ACK", 0, "ACK".length()); mOutputBuffer.flush(); Message msg = mHandler.obtainMessage(100, clientIP); mHandler.sendMessage(msg); } } } } } catch (IOException e) { Log.v(TAG, "Fail TCPServer!!"); e.printStackTrace(); } } public void cancel() { working = false; } } }