InputStream, OutputStream을 이용해서 네트워크상의 대상 사이의 데이터를 입력하고 출력한다
이때 네트워크상에서 데이터를 주고받기 위한 장치인 소켓(Socket)을 이용한다
Java에서는 Socket 클래스를 제공한다
실행순서 : 서버 -> 클라이언트
서버소켓
import java.net.ServerSocket;
import java.net.Socket;
// 서버 소켓 만든 후 브라우저로 접속
public class No18_Socket {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
// 네트워크 관련된건 try구문 안에 넣어야 한다
try {
serverSocket = new ServerSocket(9000);// 서버소켓 생성(포트번호)
System.out.println("클라이언트 맞이할 준비됨");
//클라이언트소켓은 accpet메소드를 통해 서버소켓을 받음(연결)
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.io.IOException;
import java.net.Socket;
public class No18_ClientSocket {
public static void main(String[] args) {
// 클라이언트소켓 만들기
Socket socket = null;
try {
socket = new Socket("localhost", 9000); // 로컬호스트의 ip주소 = 127.0.0.1
System.out.println("서버 연결됨");
System.out.println("socket: "+socket);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(socket != null) socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Stream 이용해서 데이터 주고받기
실행순서 : 서버 -> 클라이언트
서버소켓
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class No18_ServerSocket_Stream {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
InputStream inputS = null;
DataInputStream dataInputS = null;
OutputStream outputS = null;
DataOutputStream dataOutputS = null;
try {
serverSocket = new ServerSocket(9001);
System.out.println("클라이언트 맞이할 준비됨");
socket = serverSocket.accept();
System.out.println("클라이언트 연결");
System.out.println("socket : "+socket);
inputS = socket.getInputStream();
dataInputS = new DataInputStream(inputS);
outputS = socket.getOutputStream();
dataOutputS = new DataOutputStream(outputS);
while(true) {
// 클라이언트소켓에서 데이터 읽어오는 input
String clientMsg = dataInputS.readUTF();
System.out.println("clientMsg : "+ clientMsg);
// 클라이언트쪽으로 데이터 out
dataOutputS.writeUTF("메세지 전송 완료");
dataOutputS.flush(); // 확실하게 비우기
if(clientMsg.equals("STOP")) break;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(dataInputS != null) dataInputS.close();
if(inputS != null) inputS.close();
if(dataOutputS != null) dataOutputS.close();
if(outputS != null) outputS.close();
if(socket != null) socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class No18_ClientSocket_Stream {
public static void main(String[] args) {
Socket socket = null;
OutputStream outputS = null;
DataOutputStream dataOutputS = null;
InputStream inputS = null;
DataInputStream dataInputS = null;
Scanner sc = null;
try {
socket = new Socket("localhost", 9001);
System.out.println("서버 연결됨");
// 소켓에서 서버소켓으로 out 할때
outputS = socket.getOutputStream();
dataOutputS = new DataOutputStream(outputS);// 확장
// 서버소켓에서 소켓으로 in 할때
inputS = socket.getInputStream();
dataInputS = new DataInputStream(inputS); // 확장
sc = new Scanner(System.in);
while(true) {
System.out.println("메세지를 입력하세요:");
String outMsg = sc.nextLine();
dataOutputS.writeUTF(outMsg); // outMsg를 서버쪽으로 out
dataOutputS.flush(); // 완벽하게 비워주기
String inMsg = dataInputS.readUTF(); // 서버로부터 데이터 읽어오기
System.out.println("inMsg : " + inMsg);
if(outMsg.equals("STOP")) break;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(dataOutputS != null) dataOutputS.close();
if(outputS != null) outputS.close();
if(dataInputS != null) dataInputS.close();
if(inputS != null) inputS.close();
if(socket != null) socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
'Java' 카테고리의 다른 글
[Java] StringTokenizer (0) | 2021.08.26 |
---|---|
[Java] Collections(2)_Map 인터페이스 (0) | 2021.08.24 |
[Java] 데이터 입출력(2) BufferedReader, BufferedWriter (0) | 2021.08.09 |
[Java] 데이터 입출력(1) FileInputStream, DataInputStream, FileOutputStream, DataOutputStream (0) | 2021.08.09 |
[Java] 예외처리 (0) | 2021.08.02 |