괴발개발
[코드 리뷰]Echo Client+Server 본문
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServer코드리뷰 {
public static void main(String[] args)
throws Exception{
//1) 서버와의 연결을 위해서 new serversocket을 통해 socket 생성하고 /그리고 포트는 겹치지 않도록5555로 지정해줍니다.
ServerSocket server = new ServerSocket(5555);
//2) while문을 통해서 요청이 올때마다 받을 수 있도록 해주었고, 조건은 true로 해주어서 계속 실행할 수 있도록 했습니다.
while(true){
System.out.println("요청 대기중...");
//3)준비한 소켓 server에 .accept 메서드를 이용해서 (클라이언트) 요청을 받아줍니다. 그리고 소켓을 반환하기 때문에 소켓에 넣어줍니다.
Socket socket = server.accept();
System.out.println("접속 수락");
//4) 다음은 클라이언트에서 들어온 요청을 확인하기 위해 inputStream를 사용할꺼구요.. 소켓에.getInputStream 메서드를 써서 inputstream을
//5) 만들어줍니다.
InputStream is = socket.getInputStream();
//5) 그리고 문자열 이상의 다양한 정보를 받기 위해서 보조 스트림인 ObjectInputStream을 만들어주고 주스트림인 is를 넣어줍니다.
ObjectInputStream ois = new ObjectInputStream(is);
//6) ois에 readUTF를 통해 스트링 정보를 읽고 스트링타입의 msg에 저장합니다.
//7) 그리고 콘솔에 client를 보낸값으로 msg를 출력합니다.
String msg = ois.readUTF();
System.out.println("client 에서 보낸 값: "+msg);
//8) Hello Client 라고 응답 하기 위해서 소켓에.getoutputStream 메서드를 사용해 아웃풋 스트링을 준비해줍니다.
OutputStream os = socket.getOutputStream();
//9) 마찬가지로 다양한 정보를 다 담아주기 위해 보조스트림 objectOutputstream을 준비하고 주스트림 os를 넣어줍니다.
ObjectOutputStream oos = new ObjectOutputStream(os);
//10) 그리고 oos에 writeUTF메서드를 써서 String타입의 해당 문자열을 써줍니다.
oos.writeUTF("Hello Clinet");
//11)그리고 oos.flush를 이용해 깨끗히 비워줍니다.
oos.flush();
//12) 마지막 자원정리를 위해서 ois.close를 사용해 ois를 닫아주고, oos.close를 이용해 oos도 닫아줍니다. 그리고 소켓도 닫아줍니다.
//자원정리 // 3:0:29 뭐뭐 서버쪽에서도 뭐 어쩌구 닫고 뭐 해야한다?
ois.close();
oos.close();
socket.close();
}
//4. 콘솔창에 addr에 주소랑 열어주기
//server.close();
public class EchoClient코드리뷰 {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
//1) 소켓 생성과 서버접속 요청을 하기 위해서 socket에 new socket으로 소켓을 만들어주고 ,
//2)String host 주소에는 내 자신인 localhost를 넣어주고 , 포트는 서버에서 받아주기로 했는 5555로 지정해줍니다.
Socket socket = new Socket("localhost", 5555);
System.out.println("접속 성공");
//2) server에 Hello Server라는 요청을 보내기 위해서,, os에 socket.getOutputStream 메서드를 이용해 outputStream을 준비해 줍니다.
//3) 그리고 문자열 이상의 다양한 정보을 보내기 위해서 보조스트림인 objectoutputStream를 oos로 준비해줍니다.
OutputStream os = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
//4) oos.writeUTF메서드를 이용해서 helloserver라는 문자열을 write해주고
oos.writeUTF("Hello Server");
//5) flush를 이용해 깨끗히 objectoutputStream을 비워줍니다.
oos.flush();
//6) 요청에 대한 응답확인으로 hello client를 출력하기 위해서 inputStream을 준비합니다.
//6)socket. getInputStream() 을 이용해 is에 inputStream을 준비하고
InputStream is = socket.getInputStream();
//7) 다양한 정보을 받기 위해서 보조스트림인 objectinputStream을 준비하고 주스트림인 is를 태웠습니다.
ObjectInputStream ois = new ObjectInputStream(is);
//8) ois에 readUTF메서드를 를 통해 서버에서 부터 온 문자열을 읽어주고 string 타입 msg에 저장해줍니다.
String msg = ois.readUTF();
//9)그리고 ststem.out을 통해 서버에서 보내온 값을 msg로 출력해줍니다.
System.out.println("서버에서 보내온 값 :" + msg);
//10) 다쓴 자원을 반납하기 위해서 ois도 닫아주고, oos도 닫아줍니다.
ois.close();
oos.close();
//3. 소켓 종료
'BACK END > JAVA' 카테고리의 다른 글
[강의정리]D43 JAVA - Callable, Runnable 정리 (0) | 2023.03.16 |
---|---|
[코드리뷰] Socket - (Server, Clinet) (0) | 2023.03.16 |
[퀴즈 정리] D-45 JAVA(tread 제어, 컨트롤) (0) | 2023.03.15 |
[강의 정리]D45 JAVA(tread 제어, 컨트롤) (0) | 2023.03.15 |
<ZAVA I.O 사용해서 파일 복사하는 2번째 방법> (0) | 2023.03.14 |
Comments