간단한 채팅프로그램 만들기 2/3

살찐성인·2022년 7월 23일
0

Java

목록 보기
4/4

이번엔 Client 클래스를 만들어보자. Server클래스와 동일하게 Socket 객체를 만들고 초기화를 한다. 그리고 address 주소값을 String으로 정의한다. 이 프로그램은 다른 사람과 채팅을 하는 것이 아니므로 자기의 컴퓨터 주소인 "127.0.0.1"로 써주면 된다. 그리고 Server의 포트번호를 8999로 지정하였으니, 똑같이 포트번호를 정의한다. 서버와 클라이언트의 포트번호가 서로 다르면 통신을 할 수가 없다.

Socket socket = null;
String address = "127.0.0.1";
int port = 8999;

그리고 이어서 소켓을 사용하기 위해 매개변수에 address주소와 port번호를 넣어 소켓을 만든다. Server와 마찬가지로 new Socket위에 마우스 커서를 올리면, checked exception이기 때문에 try/catch로 감싸주어야 한다. 그러면 try문에 방금 작성한 코드가 들어가 있을 것이다. 그 코드 위에 서버에 연결중이라는 가이드 메세지를 하나 넣는다. 작성한 socket = new Socket(address, port);는 객체를 생성했다는 것이고, 그것은 채팅서버에 접속을 했다는 의미로 이해할 수 있다. 따라서 이 코드 밑줄에 채팅서버에 접속했다는 가이드 메세지도 하나 적어준다.

System.out.println("서버에 연결중입니다..");
socket = new Socket(address, port);
System.out.println("채팅서버에 접속했습니다.");

이제 클라이언트가 접속한 것을 Server에 표시를 해주어야 한다. Server 클래스로 가서, 작성한 Socket socket = serverSocket.accept(); 코드 밑에 클라이언트가 접속했다는 가이드 메세지를 하나 적는다. 이것으로 객체를 생성하는 과정은 모두 끝났다. 지금부터는 서로 채팅을 주고받는 기능을 넣어야 하는데, inputStream과 outputStream을 이용하여 채팅을 해보도록 하자.

Server클래스에 try문 윗부분에 inputStream과 outputStream을 각각 ctrl+space로 임포트 후 null값으로 초기화까지 한다. Client 클래스에서도 방금 한 것과 똑같이 try문 윗부분에 inputStream과 outputStream을 각각 ctrl+space로 임포트 후 null값으로 초기화까지 해보자.


InputStream is = null;
OutputStream os = null;

다시 Server 클래스로 돌아와서, 만든 소켓에서 객체를 뽑아내면 된다. 클라이언트가 접속했다는 가이드 메세지 밑에 방금 정의한 inputStream과 outputStream 객체를 생성해보자.

is = socket.getInputStream();
os = socket.getOutputStream();

이것만으로도 아주 간단한 채팅 프로그램을 시작하는 밑그림을 그렸다고 볼 수 있다. 하지만 좀 더 원활한 채팅을 위해 보조스트림도 활용해 보도록 하자. 아까 정의한 inputStream과 outputStream 밑에 보조스트림 2개를 임포트한 후 null 값으로 초기화까지 해보자. 그리고 Client 클래스에서도 똑같이 해주면 된다. Server에서 작성한 두 줄을 Client 클래스에 복사 후 붙여넣기를 하면 Client 클래스에서는 따로 import를 하지 않아도 자동으로 import가 이루어진다.

DataInputStream dis = null;
DataOutputStream dos = null;

그 후 다시 try문 안으로 들어와서, os = socket.getOutputStream(); 라고 작성했던 코드 밑부분에 똑같이 보조스트림 객체를 생성한다. 그 후 밑에 채팅이 시작되었다는 가이드 메세지도 하나 넣어주면 좋다. 왜 매개변수 안에 is와 os가 들어가냐면, 이 보조스트림은 주 스트림 없이 혼자서는 사용을 할 수 없기 때문에 주 스트림을 넣어서 어떤 스트림이 주 스트림인지 표시하기 위함이다.

dis = new DataInputStream(is);
dos = new DataOutputStream(os);
System.out.println("채팅이 시작되었습니다.");

Client 클래스에도 똑같이 try문 안으로 들어와서 os = socket.getOutputStream(); 밑에 위 코드 3줄을 넣어주면 된다.

0개의 댓글