ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 21일 차 TCP단체 채팅방(서버와 클라이언트)
    삼성SDS_멀티캠퍼스/Java 2015. 10. 7. 16:17
    반응형

    import java.io.BufferedReader;

    import java.io.BufferedWriter;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.net.InetAddress;

    import java.net.Socket;

    import java.util.Collections;

    import java.util.HashMap;

    import java.util.Map;


    public class Receiver2 implements Runnable {


    private static Map<InetAddress, BufferedWriter> clientMap;


    static {

    clientMap = new HashMap<InetAddress, BufferedWriter>();

    Collections.synchronizedMap(clientMap);

    }


    public static Map<InetAddress, BufferedWriter> getClientMap() {

    return clientMap;

    }


    private Socket socket;


    public Receiver2(Socket socket) {

    this.socket = socket;

    }


    @Override

    public void run() {

    // TODO Auto-generated method stub


    try {

    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));

    String msg = null;


    while ((msg = br.readLine()) != null) {

    if (msg.equals("종료"))

    break;


    if (msg.startsWith("/")) {


    if (msg.charAt(1) == 'w') {

    // 귓속말

    String[] w = msg.split(" ");

    InetAddress ia = InetAddress.getByName(w[1]);

    if (clientMap.get(ia) != null) {

    clientMap.get(ia).write(w[2] + "\n");

    clientMap.get(ia).flush();

    }


    else if (msg.charAt(1) == 'g') {

    // 접속자 조회

    for (InetAddress i : clientMap.keySet()) {

    clientMap.get(socket.getInetAddress()).write(i + "\n");

    clientMap.get(socket.getInetAddress()).flush();

    }


    }

    }

    } else {

    // 아닌건 일반채팅

    System.out.println(socket.getInetAddress() + " : " + msg);

    for (BufferedWriter bw : clientMap.values()) {

    bw.write(msg + "\n");

    bw.flush();

    // 지금까지 접속된 모든 socket에 bw들에 대해 msg전달

    }

    }


    }


    } catch (


    IOException e)


    {

    System.out.println("문제 발생 : 프로그램을 종료합니다");

    } finally


    {

    if (socket != null)

    try {

    System.out.println(socket.getInetAddress() + " 연결종료");

    clientMap.remove(socket.getInetAddress()); // 종료되는 소켓에 대한

    // B.W삭제

    socket.close();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    // System.exit(1);

    }


    }


    }





    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class TCP_ChatMain {
    public static void main(String[] args) {
    ServerSocket serverSocket = null;
    try {
    serverSocket = new ServerSocket(5000);
    while (true) {
    Socket socket = serverSocket.accept();
    // socket에 대해 리더 쓰레드 돌리기
    Receiver2 receiver = new Receiver2(socket);
    Thread rThread = new Thread(receiver);
    rThread.start();

    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
    Receiver2.getClientMap().put(socket.getInetAddress(), bw);
    // 소켓이 새로 연결될 때, 리시버쓰레드 동작시키고 해당 소켓에 대한 IP주소와 B.W를 맵에 담는다

    System.out.println(socket.getInetAddress() + " 입장했습니다");
    System.out.println("현재 접속중인 사람");
    for (InetAddress i : Receiver2.getClientMap().keySet())
    System.out.println(i);
    System.out.println("----------------------");
    }

    } catch (IOException e) {
    // TODO Auto-generated catch block
    }

    }
    }









    여기까지가 서버입니다.






    ---------------------------------------------------------------



    import java.io.BufferedReader;

    import java.io.BufferedWriter;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.io.OutputStreamWriter;

    import java.io.PrintWriter;

    import java.net.Socket;

    import java.net.UnknownHostException;

    import java.util.Scanner;


    public class Sender2 {

    public static void main(String[] args) {


    Socket socket;

    Scanner scan = new Scanner(System.in);


    // TODO Auto-generated method stub

    try {

    socket = new Socket("70.12.115.118", 5000);

    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));


    String msg = null;


    while (true) {

    msg = scan.nextLine();

    bw.write(msg + "\n");

    bw.flush();


    }

    } catch (IOException e) {


    }


    }

    }


    여기는 클라이언트 입니다



    반응형

    '삼성SDS_멀티캠퍼스 > Java' 카테고리의 다른 글

    22일 차 SVN 기본 생성  (0) 2015.10.08
    22일 차 SVN (서브버전)  (0) 2015.10.08
    20일 차 TCP통신  (0) 2015.10.06
    19일 차 Socket 통신으로 채팅방 만들기  (0) 2015.10.05
    19일 차 소켓 통신  (0) 2015.10.05
Designed by Tistory.