개발모음집

Java Socket, Chatting Program 본문

JAVA

Java Socket, Chatting Program

void 2018. 3. 22. 09:00

자바 채팅 프로그램 만들기


1. 자바 소켓으로 채팅프로그램 만들기. (참고 블로그)


우선 참고 블로그에 올려놓은 프로젝트를 다운로드하여 실행하였다. (이클립스에서 프로젝트 열기 참고 블로그)

Connection timed out 에러가 발생했다. (에러 1 : 아래에서 에러 해결 방법 확인) 


2. AWS 서버 세팅하기 (AWS 세팅을 위해 블로그참고하였다.)


3. AWS 서버에서 채팅 서버로 사용할 자바파일 실행시키기


3-1 자바파일 실행시키기전에 채팅 프로그램에서 사용할 port를 열어줘야한다.

AWS서버에 8888 port를 열어준다. 


3-2 jdk를 설치하자

서버 세팅 후 이클립스에서 run을 하였다.  생각해보니 java파일이 동작하려면 jdk가 필요하다.

jdk를 깔고 .java파일를 컴파일(참고 블로그)하려는데 인코딩 에러가 발생하였다 (파일 확장자가 .class가 아닌 java이다)


참고2 블로그


3-3 한글을 제거하고, package client를 제거해주자. 


3-4 자바파일 컴파일하기

javac ClientManagerThread.java

javac ChatServer.java


3-5 서버로 사용할 자바파일을 실행시키기


java ChatServer


* 참고 AWS를 서버로 사용할 경우 클라이언트 소켓 프로그램에 입력할 IP는 "IPv4 퍼블릭 IP"로 사용한다.

ex ) Socket c_socket = new Socket("IPv4 퍼블릭  IP", 8888);

==========================================================================================

정리


1. BufferReader 클래스가 뭐지?

BufferedReader / BufferedWriter는 문자 입력 스트림으로부터 문자를 읽어 들이거나 문자 출력 스트림으로 문자를 내보낼 때 버퍼링을 함으로써 문자, 문자 배열, 문자열 라인 등을 보다 효율적으로 처리할 수 있도록 해준다.

출처: [개발이 하고 싶어요]


2. inputstreamreader가 뭐지?

InputStreamReader / OutputStreamWriter는 바이트 스트림에서 문자 스트림으로, 또는 문자 스트림에서 바이트 스트림으로의 변환을 제공하는 입출력 스트림이다. 바이트를 읽어서 지정된 문자 인코딩에 따라 문자로 변환하는데 사용한다.



문자로 변환하는 경우 인코딩 방식은 특정 방식으로 지정할 수도 있고 경우에 따라서는 플랫폼의 기본 인코딩을 이용하기도 한다.


출처:  [개발이 하고 싶어요]

3. printwriter가 뭐지?


file에 글쓰는 함수


4. 소켓이 뭐지? 


소켓은 각 포트를 사용하여 통신을 수행하는 도구, 소켓은 출입구를 통하여 데이터를 직접 송수신하는 매체

동작 로직

1. 서버 소켓과 클라이언트 소켓으로 나뉩니다.

2. 서버 소켓의 역할은 클라이언트 소켓의 연결 요청을 대기하고, 연결 요청이 오면 클라이언트 소켓을 생성하여 통신을 가능하게 합니다.

3. 클라이언트 소켓은 대기하는것 없이 바로 사용가능하며, 실제로 데이터 송수신이 일어나는 것은 클라이언트 소켓입니다.

출처 : [공통개념] TCP/IP 통신, 소켓 통신의 개요 (Socket) | 작성자 모프



출처 :  [Java 강의91] 자바 소켓 통신|작성자 모프



5. jdk, jde, jvm이 뭐지?


JVM : JVM은 자바 가상머신(Java Virtual Machine)의 약자이다.


JRE : JRE는 자바 실행환경(Java Runtime Environment)의 약자이다.

JRE는 JVM 이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있다. JRE는 JVM의 실행환경을 구현했다고 할 수 있다.

JDK : JDK는 자바 개발도구(Java Development Kit)의 약자이다.


JDK는 JRE + 개발을 위해 필요한 도구(javac, java등)들을 포함한다.



 참고 : 블로그


==========================================================================================

에러 해결 모음  


에러 1

(이클립스 실행시)java.net.ConnectException: Connection timed out: connect 

ChatClient.java 코드에 아래와 같이 써있다. 

Socket c_socket = new Socket("192.168.0.2", 8888);

소켓에 IP주소와 포트번호를 포함하는 것 같다. 내가 쓸 서버의 주소와 포트번호를 적어주자.


에러 2 

(이클립스 실행시)  java.net.ConnectException: Connection refused: connect

digitalocean과 블로그를 참고하여 jdk 설치


에러 3

(리눅스에서 자바파일 컴파일시) javac -d . ChatServer.java error: unmappable character (0xC7) for encoding UTF-8

==> 코드상에 한글 삭제하면 더 빨리 해결됨

 ChatServer.java파일과 ClientManagerThread.java파일이 있는 server 폴더를 ubuntu에 옮긴다.
그리고 두 파일이 있는 server 폴더 내에서 아래의 명령어를 입력하여 컴파일해준다. (
꼭 두 파일을 한 번에 컴파일해야한다. 하나씩하면 에러 발생)

javac -encoding MS949 ChatServer.java ClientManagerThread.java

참고 : 블로그


에러 4 

Exception in thread "main" java.lang.UnsupportedClassVersionError: ChattingServer has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0


==> 리눅스에 jvm이 여러개설치되어있었음

sudo update-alternatives --config java

입력하여 최신 버전 선택