- 소켓
- 프로세스의 통신에 사용되는 양쪽 끝 단
- 서로 다른 두 호스트를 연결해주는 도구로써 인터페이스의 역할
- HTTP 통신과 다르게 양방향 통신, 실시간으로 데이터를 주고 받는 상황(게임, 채팅)등에 주로 사용
- 종류
- TCP
- 연결 지향
- 1:1 통신
- 느린 전송 속도
- 데이터 전송에 신뢰성 보장
- UDP
- 비연결 지향
- 1:1, 1:n, n:n 통신
- 빠른 전송 속도
- 데이터 전송에 신뢰성 보장 못함
- TCP

- Server.Java
public class Server {
public static void main(String[] args) {
Socket socket = null; //Client 와 통신하기 위한 소켓
ServerSocket serverSocket = null; //서버 생성을 위한 서버소켓
BufferedReader br = null; //Client 로 부터 데이터를 읽어오기 위한 입력 스트림
PrintWriter pw = null; //Client 로 데이터를 보내기 위한 출력 스트림
try {
serverSocket = new ServerSocket(1234);
}catch (IOException e) {
System.out.println("해당 포트가 열려있습니다,");
} try {
System.out.println("서버 오픈");
//서버를 생성, Client 접속 대기
socket = serverSocket.accept();
//입력 스트림 생성
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//출력 스트림 생성
pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
String str = null;
str = br.readLine(); //Client 로 부터 데이터 읽어옴
System.out.println("Client의 메세지 : " + str);
pw.write(str);
pw.flush(); //버퍼링으로 인해 기록되지 않은 데이터를 출력스트림에 모두 출력
socket.close(); //출력되지 않은 스트림 모두 출력하고 소켓 닫음
} catch (IOException e) {
}
}
}
- Client.Java
public class Client {
public static void main(String[] args) {
Socket socket = null; //Server 와 통신하기 위한 소켓
BufferedReader br = null; //Server 로 부터 데이터를 읽어들이기 위한 입력 스트림
BufferedReader br2 = null; //키보드로부터 읽어들이기 위한 입력 스트림
PrintWriter pw = null; //Server 로 내보내기 위한 출력 스트림
InetAddress ia = null;
try {
ia = InetAddress.getLocalHost(); //Server 로 접속하기 위한 로컬호스트 주소 가져옴
socket = new Socket(ia, 1234); //서버의 포트 번호
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
br2 = new BufferedReader(new InputStreamReader(System.in));
pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
System.out.println(socket.toString());
} catch (IOException e) {
} try {
System.out.print("서버로 보낼 메세지 : ");
String data = br2.readLine(); //키보드로부터 입력
pw.println(data); //서버로 데이터 전송
pw.flush();
String str2 = br.readLine(); //서버로부터 되돌아오는 데이터 읽어옴
System.out.print("서버의 응답 : " + str2);
socket.close();
} catch (IOException e) {
}
}
}


- InputStreamReader, BufferedReader
- InputStream : Byte 단위로 데이터를 읽어옴 -> System.in 도 InputStream
- InputStreamReader : Char 단위로 데이터를 읽어옴
- BufferedReader : Char 단위의 직렬화
- 코드
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
- socket의 데이터를 InputStream(바이트 단위)로 읽어오고 InputStreamReader를 통해 char 타입으로 변환 후 BufferedReader를 통해 직렬화
GitHub - Pearlmoon997/Socket: 자바 소켓 프로그래밍
자바 소켓 프로그래밍. Contribute to Pearlmoon997/Socket development by creating an account on GitHub.
github.com
'Java_ 소켓' 카테고리의 다른 글
Java_ 채팅, 스레드 (0) | 2022.10.20 |
---|---|
TCP & UDP (0) | 2022.10.06 |
소켓 프로그래밍 (0) | 2022.09.29 |