이전 글에서는 서버와 클라이언트를 만든 뒤 연결을 해 봤었는데
이제는 서버와 클라이언트 간 메세지를 주고 받아보자
먼저 서버로 사용할 MySocketServer 자바 파일인데
이전과 다른점은 Socket을 사용하게 위해 Socket 타입의 SocketUser를 상단에 선언했고
클라이언트가 accept() 시 socketUser에 해당 정보를 받게 된다
이후 InputStream과 BufferedReader를 사용해서
InputStream 안에 클라이언트의 InputStream 정보를 받고
BufferedReader 안에 InputStream 정보를 넣어서 클라이언트가 보낸 값을 가져온다
reader.readLine()을 사용하면 클라이언트가 보낸 값이 있을 경우 가져올 수 있다
(클라이언트가 2번 보냈을 경우, readLine도 2번 필요함)
다음은 서버에서 클라이언트를 보내는 경우인데
OutputStream과 PrintWriter를 이용해서
OutputStream안에 클라이언트의 OutputStream 정보를 받고
PrintWriter 안에 OutputStream 정보를 넣어서 클라이언트에 값을 보내준다
writer.println("값"); 으로 클라이언트에 값을 보내주게 된다
다음으로는 클라이언트의 역할을 하는 MySocketClient 자바 파일인데
보면 동일하게 OutputStream, PrintWriter, InputStream, BufferedReader를 사용해서
메세지를 주고 받는 것을 볼 수 있다
OutputStream은 보낼때
InputStream은 받을때 라고 생각하면 된다
예제에 사용한 전체 코드는 아래와 같다
// 서버
public class MySocketServer {
public static void main(String[] args) {
try {
int socketPort = 1234;
ServerSocket serverSocket = new ServerSocket(socketPort); // 소켓 만들기
Socket socketUser = null; // 클라이언트 접속시 사용할 Socket
System.out.println("socket : " + socketPort + "으로 서버가 열렸습니다");
// 소켓 서버가 종료될 때까지 반복
while(true) {
socketUser = serverSocket.accept();
// 소켓 서버로 접속 시 socketUser에 접속자 정보 할당
System.out.println("Client가 접속함 : " + socketUser.getLocalAddress());
// 접속자의 getLocalAddress 가져오기
// InputStream - 클라이언트에서 서버로
InputStream input = socketUser.getInputStream();
// socket의 InputStream 정보를 InputStream in에 넣은 뒤
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
// BufferedReader에 위 InputStream을 담아 사용
System.out.println(reader.readLine());
// 클라이언트에서 온 메세지 확인
// OutputStream - 서버에서 클라이언트로
OutputStream out = socketUser.getOutputStream();
// socket의 OutputStream 정보를 OutputStream out에 넣은 뒤
PrintWriter writer = new PrintWriter(out, true);
// BufferedReader에 위 InputStream을 담아 사용
writer.println("SERVER TO CLIENT");
// 서버에서 클라이언트로 메세지 보내기
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// 클라이언트
public class MySocketClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("121.153.255.53", 1234); // 소켓 서버에 접속
System.out.println("socket 서버에 접속 성공!");
// OutputStream - 클라이언트에서 Server로 메세지 발송
OutputStream out = socket.getOutputStream();
// socket의 OutputStream 정보를 OutputStream out에 넣은 뒤
PrintWriter writer = new PrintWriter(out, true);
// PrintWriter에 위 OutputStream을 담아 사용
writer.println("CLIENT TO SERVER");
// 클라이언트에서 서버로 메세지 보내기
// InputStream - Server에서 보낸 메세지 클라이언트로 가져옴
InputStream input = socket.getInputStream();
// socket의 InputStream 정보를 InputStream in에 넣은 뒤
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
// BufferedReader에 위 InputStream을 담아 사용
System.out.println(reader.readLine());
// 서버에서 온 메세지 확인
System.out.println("CLIENT SOCKET CLOSE");
socket.close(); // 소켓 종료
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
'Language > Java' 카테고리의 다른 글
자바 소켓통신으로 단체 채팅 프로그램 만들기 (0) | 2020.02.02 |
---|---|
자바 Thread에서 run()과 start()의 차이점은? (0) | 2020.02.02 |
자바 소켓 통신 서버 & 클라이언트 작성 및 연결해보기 (2) | 2019.12.12 |
자바 디버그 설정 및 실행방법 (0) | 2019.12.04 |
자바 Map 사용법부터 출력까지 (1) | 2019.12.03 |
댓글