android Soket를 활용한 통신 - Server
android에서 socket을 활용하여 Server, Client를 구현하여 통신하는 법을 알아보도록 하겠습니다.
우선 Server를 만드는 일인데요.
android 디바이스에서 Server를 만들기 위해서는 Wifi환경이어야 가능 합니다.
Server가 직접 쓰는 것은 아니지만 Client가 Server에 접근하기 위해서는 필요 합니다.
포트를 셋팅하여 서버를 생성하고
쓰레드 안에서 Client의 연결을 기다립니다.
accept() 함수를 통하여 client Socket의 값을 받습니다.
writeUTF을 통해 텍스트를 전송 할수 있습니다.
다음에는 이어서 Client Socket을 다루어 보겠습니다.
우선 Server를 만드는 일인데요.
android 디바이스에서 Server를 만들기 위해서는 Wifi환경이어야 가능 합니다.
public static String getLocalIpAddress(Context appContext) { WifiManager wifiMgr = (WifiManager) appContext.getSystemService(WIFI_SERVICE); WifiInfo wifiInfo = wifiMgr.getConnectionInfo(); int ip = wifiInfo.getIpAddress(); String ipAddress = String.format("%d.%d.%d.%d" , (ip & 0xff) , (ip >> 8 & 0xff) , (ip >> 16 & 0xff) , (ip >> 24 & 0xff)); return ipAddress; }Wifi환경에서 디바이스의 IP주소를 가져오는 소스입니다.
Server가 직접 쓰는 것은 아니지만 Client가 Server에 접근하기 위해서는 필요 합니다.
private ServerSocket serverSocket; private void createServer() { try { isRunning = true; serverSocket = new ServerSocket(SERVER_PORT); new Thread(new Runnable() { @Override public void run() { while (isRunning) { Log.d(LOG_TAG, "Server Wait"); try { Socket socket = serverSocket.accept(); Log.d(LOG_TAG, socket.getInetAddress() + " connect"); listenClientSocket(socket); } catch (IOException e) { e.printStackTrace(); } } } }).start(); } catch (IOException e) { e.printStackTrace(); } }서버 생성 부분 입니다.
포트를 셋팅하여 서버를 생성하고
쓰레드 안에서 Client의 연결을 기다립니다.
accept() 함수를 통하여 client Socket의 값을 받습니다.
private void listenClientSocket(final Socket socket) { if (socket == null) { return; } new Thread(new Runnable() { private DataInputStream in; private DataOutputStream out; @Override
public void run() { try { out = new DataOutputStream(socket.getOutputStream()); in = new DataInputStream(socket.getInputStream()); } catch (IOException e) { e.printStackTrace(); } try {// 계속 듣기만!!
while (in != null) { String msg = in.readUTF(); Log.d(LOG_TAG, "listent : " + msg); } } catch (IOException e) { // 사용접속종료시 여기서 에러 발생. } } }).start(); }
Client Socket에 대한 연결을 개별 처리 하는 부분 입니다.
DataInputStream은 메세지 읽기
DataInputStream은 메세지 보내기
private void sendData(DataOutputStream out, String sMsg) throws IOException { if(out == null) { return; } out.writeUTF(sMsg); }메세지를 Client Socket으로 보내는 부분 입니다.
writeUTF을 통해 텍스트를 전송 할수 있습니다.
try { serverSocket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }Server Socket은 close함수를 통해서 종료 할수 있습니다.
다음에는 이어서 Client Socket을 다루어 보겠습니다.
댓글
댓글 쓰기