본문 바로가기
카테고리 없음

(JAVA) TCP/IP통신 1:1 채팅프로그램

by 팁텍북 2017. 11. 21.

(JAVA) TCP/IP통신 1:1 채팅프로그램

package p10.chatting;
import java.net.Socket;
/**
*  MultiThread방식의 Client
* - SenderThread와 RecieveThread 중 하나라도
* 실행 중이면 main메소드는 종료되지 않음.
* - 서버와 클라이언트간이 통신은 소켓간의 통신.
* */
public class ClientExample {
    public static void main(String[] args) {
        Socket socket = null;
        try {
            socket = new Socket("192.168.10.58", 5011);//소켓생성(ip주소,port)
            Thread th1 = new SenderThread(socket);
            Thread th2 = new ReceiverThread(socket);
            th1.start();
            th2.start();
        }catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

ClientExample.java


package p10.chatting;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
public class ReceiverThread extends Thread{
    //필드
    Socket socket;
    //생성자
    public ReceiverThread(Socket socket) {
        this.socket = socket;
    }
    //메소드
    @Override
    public void run() {
        try {
            BufferedReader reader
            = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            while(true) {
                String str = reader.readLine();//데이타의 한줄 구분 '\r\n'
                if(str==null) break;//입력받은 값이 없으면 반복문 종료
                 System.out.println("수신>"+str);//수신메세지 출력
            }
        }catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

ReceiverThread.java


package p10.chatting;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

/**
* 송신 thread객체
* */
public class SenderThread extends Thread{
    //필드
    Socket socket;
    //생성자
    public SenderThread(Socket socket) {
        this.socket = socket;
    }
    //메소드
    @Override
    public void run() {
        try {
            //입력으로들어어는 스트림의 속도 향상
            BufferedReader reader
            = new BufferedReader(new InputStreamReader(System.in));
            PrintWriter writer =
                    new PrintWriter(socket.getOutputStream());//출력스트림
            while(true) {
                String str = reader.readLine();//입력된 데이타를 한줄단위로 읽음
                if(str.equals("bye"))
                    break;//입력값이 bye면 클라이언트 종료
                writer.println(str);//bye가 아니면 메세지 전송
                writer.flush();//버퍼내의 데이타 밀어내기
            }
        }catch(Exception e) {
            System.out.println(e.getMessage());
        }finally {
            try {
                socket.close();//클라이언트 종료시는 반드시 소켓 해제
            }catch(Exception e) {}
        }
    }
}

SenderThread.java


package p10.chatting;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 서버는 ServerSocket을 가짐
* ServerSocket이 Socket을 생성
* */
public class ServerExample {
    public static void main(String[] args) {
     //소켓 생성
        ServerSocket serverSocket = null;
        Socket socket = null;
        try {
            serverSocket = new ServerSocket(5011);//port번호5001로 서버소켓 생성
            socket = serverSocket.accept();//소켓생성 메소드 accept();
            Thread th1 = new SenderThread(socket);
            Thread th2 = new ReceiverThread(socket);
            th1.start();
            th2.start();
        }catch(Exception e) {System.out.println(e.getMessage());
        }finally {//서버 종료시 소켓을 해제
            try {
                serverSocket.close();
            }catch(Exception e) {}
        }
    }
}

ServerExample.java



댓글