기타 xml 세팅은 여기를 참조
http://gusfree.tistory.com/entry/11%EC%9D%BC%EC%B0%A8-SocketServer
ChatServer.class
package chat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; public class ChatServer { int PORT = 5000; ArrayList<ClientThread> clientList = new ArrayList<ClientThread>(); String who; public ChatServer() { // default Constructor System.out.println("시작"); try { // 1. 서버소켓을 생성한다. port ServerSocket server = new ServerSocket(PORT); System.out.println("서버생성 및 레디상태"); while (true) { // 2. 서버소켓이 클라이언트가 접속할수 있도록 ready Socket socket = server.accept(); // accept에 block String who=socket.getInetAddress().getHostAddress(); System.out.println("접속 IP :"+ who); ClientThread thread=new ClientThread(socket); thread.start(); } } catch (IOException e) { } } // 클라이언트와 데이터를 주고 받는 기능을 담당 class ClientThread extends Thread{ Socket socket; BufferedReader br; // 데이터 받을 때 사용 PrintWriter pw; // 데이터 보낼 때 사용 public ClientThread (Socket socket){ this.socket=socket; try { InputStream is=socket.getInputStream(); InputStreamReader isr= new InputStreamReader(is); br = new BufferedReader(isr); pw = new PrintWriter(socket.getOutputStream()); // Line 단위로 보냈으니 Line단위로 읽자 String firstMessage = br.readLine(); who=socket.getInetAddress().getHostAddress(); sendAll(who+" connected"); //나는 내가 접속했습니다라는 메세지를 받지 않음 clientList.add(this); System.out.println(firstMessage); } catch (Exception e) { } } @Override public void run() { super.run(); try{ String line=""; while( ( line=br.readLine()) !=null ) { System.out.println(line); if(line.equals("/exit")){ clientList.remove(this); sendAll(who+" leaved "); } sendAll(line); } }catch(Exception e){ } } // 데이터 보내는 메서드 public void send(String line){ pw.println(line); pw.flush(); } @Override public void destroy() { pw.println("/exit"); pw.flush(); pw.close(); try{ socket.close(); }catch (Exception e) { } } } // 서버에 연결된 모든 클라이언트에게 메세지를 보내기 public void sendAll(String line){ // ArrayList안에 들은 모든 쓰레드에게 for(ClientThread oneThread : clientList ){ oneThread.send(line); } } public static void main(String[] args) { new ChatServer(); } }
'Android > 2012.04월 강좌' 카테고리의 다른 글
Toast 에 이미지 띄우기 (0) | 2012.05.17 |
---|---|
13일차 Font (0) | 2012.05.14 |
11일차 SocketServer (Client,Server C->S, S->C) (0) | 2012.05.10 |
11일차 Json (0) | 2012.05.10 |
11일차 NavarOpenAPI 이용한 Dom Parser (0) | 2012.05.10 |