네트워크 데이터 입력 및 출력
네트워크 대상(객체) 사이에 입/출력(InputStream, OutputStream)을 이용해서 데이터를 입력하고 출력한다
소켓(Socket)
네트워크상에서 데이터를 주고받기 위한 장치
서로 다른 겍체들간에 네트워크로 연결된 상태에서 입/출력을 하기 위한 장치를 소켓이라고 한다
Socket 클래스
서버는 클라이언트를 맞을 준비를 하고 있다가 클라이언트의 요청에 반응한다
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class MainClass {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(9000); // 포트번호 9000번
System.out.println("클라이언트 맞을 준비 완료!!");
socket = serverSocket.accept();
System.out.println("클라이언트 연결!!");
System.out.println("socket: "+socket);
} catch(Exception e) {
e.printStackTrace();
} finally {
try {
if(socket != null) socket.close();
if(serverSocket != null) serverSocket.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
---- result ----
클라이언트 맞을 준비 완료!!
클라이언트 연결!!
socket: Socket[addr=/0:0:0
Client와 Server 소켓(Socket)
서버에서 SeverSocket을 준비하고 클라이언트에서 Socket를 이용해서 접속한다
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(9000);
System.out.println("클라이언트 맞을 준비 완료!!");
socket = serverSocket.accept();
System.out.println("클라이언트 연결!!");
System.out.println("socket: "+socket);
} catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(socket != null) socket.close();
if(serverSocket != null) serverSocket.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
import java.net.Socket;
public class Client {
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket("localhost", 9000); // 127.0.0.1 : localhost
System.out.println("서버 연결!!");
System.out.println("socket: "+socket);
} catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(socket != null) socket.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
양방향 통신
클라이언트와 서버는 InputStream, OutputStream을 이용해서 양방향 통신을 할 수 있다
public class Server {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
InputStream inputStream = null;
DataInputStream dataInputStream = null;
OutputStream outputStream = null;
DataOutputStream dataOutputStream = null;
try {
serverSocket = new ServerSocket(9000);
System.out.println("클라이언트 맞을 준비 완료!!");
socket = serverSocket.accept();
System.out.println("클라이언트 연결!!");
System.out.println("socket: "+socket);
inputStream = socket.getInputStream();
dataInputStream = new DataInputStream(inputStream);
outputStream = socket.getOutputStream();
dataOutputStream = new DataOutputStream(outputStream);
while(true) {
String clientMessage = dataInputStream.readUTF();
System.out.println("clientMessage : "+clientMessage);
dataOutputStream.writeUTF("메시지 전송 완료!!!");
dataOutputStream.flush();
if(clientMessage.equals("STOP")) {
System.out.println("서버를 종료합니다");
break;
}
}
} catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(socket != null) socket.close();
if(serverSocket != null) serverSocket.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
public class Client {
public static void main(String[] args) {
Socket socket = null;
OutputStream outputStream = null;
DataOutputStream dataOutputStream = null;
InputStream inputStream = null;
DataInputStream dataInputStream = null;
Scanner scanner = null;
try {
socket = new Socket("localhost", 9000); // 127.0.0.1 : localhost
System.out.println("서버 연결!!");
outputStream = socket.getOutputStream();
dataOutputStream = new DataOutputStream(outputStream);
inputStream = socket.getInputStream();
dataInputStream = new DataInputStream(inputStream);
scanner = new Scanner(System.in);
while(true) {
System.out.println("메시지 입력!!");
String outMessage = scanner.nextLine();
dataOutputStream.writeUTF(outMessage);
dataOutputStream.flush();
String inMessage = dataInputStream.readUTF();
System.out.println("inMessage : "+ inMessage);
if(outMessage.contentEquals("STOP")) break;
}
} catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(socket != null) socket.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
'Study > Java' 카테고리의 다른 글
[Java/JSP] JSP & Servlet 이란 (0) | 2020.07.04 |
---|---|
[Java/JSP] 웹 프로그램 개요 (프로토콜,IP,정적 & 동적 웹페이지) (0) | 2020.07.04 |
[Java] 입력과 출력 (0) | 2020.07.04 |
[Java] 예외처리 Exception, Error (이것만 알면 된다!!) (0) | 2020.07.04 |
[Java] Collections (0) | 2020.07.03 |
댓글