일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자켓실측
- 필터링후복사붙여넣기
- WHATTIMEOFTHEDAY
- Armhole Drop
- 와끼
- AATCC
- 비슬론지퍼
- 봉제용어
- 우레탄지퍼
- 엑셀자동서식
- 웹API
- 슈퍼코딩
- TACKING
- 고급영어단어
- 핸드캐리쿠리어차이점
- MERN스택
- 엑셀드래그단축키
- 암홀트롭
- 클린코드
- 비리짐
- 40HQ컨테이너
- 미국영어연음
- 미니마카
- 엑셀필터복사붙여넣기
- 영어시간읽기
- 40HQ컨테이너40GP컨테이너차이
- 나일론지퍼
- 헤이큐
- 요척합의
- 지연환가료
- Today
- Total
CASSIE'S BLOG
[슈퍼코딩] 59-1강 Server-client 소개와 직렬화/역직렬화 본문
네트워크와 컴퓨터가 연결 될 때 반드시 소켓을 이용한다.
플러그 꽂는 게 소켓이라는 느낌이다.
client 코드는 다른 컴퓨터로 하기
Server도 그렇고 Client도 그렇고 실행메소드로 만들면 된다고함.
클라이언트소켓만들고 서버소켓도 만들어야한다.
package exercise.chapter_57;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
// TODO: 서버 소켓 생성
// TODO: 클라이언트 접속 대기
try(ServerSocket serverSocket = new ServerSocket(1234); // 서버 소켓 생성
Socket clientSocket = serverSocket.accept(); // 클라이언트 접속 대기
){
System.out.println("서버가 시작되었습니다.");
System.out.println("클라이언트가 접속하였습니다.");
// TODO: 클라이언트로부터 데이터를 받기 위한 InputStream 생성
InputStream clientInputstream = clientSocket.getInputStream();
BufferedReader clientBufferedReader = new BufferedReader(new InputStreamReader(clientInputstream));
// TODO: 클라이언트로 데이터를 보내기 위한 OutputStream 생성
OutputStream serverOutputStream = clientSocket.getOutputStream();
PrintWriter printWriter = new PrintWriter(serverOutputStream, true);
// inputLine;
String inputLine;
// TODO: 클라이언트로부터 데이터를 읽고 화면에 출력
while((inputLine = clientBufferedReader.readLine()) != null ) {
System.out.println("클라이언트로 부터 온 요청은 " + inputLine);
printWriter.println("서버로부터 응답이 왔습니다.");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
지금 try문 안에 넣었잖아
ServerSocket은 컴퓨터의 공유리소스임. 그래서 나중에 close를 해야함.
공유리소스가 autoClosable이라는 인터페이스를 상속하고있으면
try안에 적어주게되면 나중에 close를 호출할 필요가 없다.
예외가 생길 것 같은거는 전부다 try catch 문 적어준다. 그게 정석임.
기존의 스트림은 바이트스트림인데
문자열로 왔다갔다할거기때문에
InputStreamReader(clientInputstream)를 넣어주라고함. (이거 보조)
근데 속도를 빠르게 하기 위해서
ButterReader에 넣는다고 함 (보조)
In Java, there are two main types of streams: byte streams (InputStream, OutputStream) and character streams (Reader, Writer). The byte streams deal with raw binary data, while character streams are designed for handling character data (strings).
In your code, the clientInputstream is an InputStream, which is a byte stream. However, when you want to read text data from the client, it's more convenient to use character streams. This is where InputStreamReader comes in. It's a bridge from byte streams to character streams, converting bytes into characters.
Here's a breakdown of the relevant part of your code:
Explanation:
- clientSocket.getInputStream(): This gets the raw byte stream from the client. It's like a pipe through which bytes flow from the client to your server.
- new InputStreamReader(clientInputstream): This wraps the byte stream in a character stream. It converts the incoming bytes into characters using the default character encoding of the platform.
- new BufferedReader(...): This adds buffering to the character stream. Buffering is like having a temporary storage area for characters. It can improve performance by reducing the number of actual reads from the underlying byte stream.
So, putting it all together, you're creating a BufferedReader named clientBufferedReader that reads text data from the client. This makes it easier to work with text-based communication between your server and client. You can use methods like readLine() on clientBufferedReader to read complete lines of text from the client.
서버는 클라이언트한테 request받고 그 request를 해석해서
적당한 응답을 내줘야하잖아.
내보내기 위해서 outputStream 만들어줘야지
클라이언트 입장에서의 output socket를 만들면 된다.
OutputStream serverOutputStream = clientSocket.getOutputStream();
소켓이 리턴됨
The line ClientSocket clientSocket = serverSocket.accept(); in your code is waiting for a client to connect to your server. Once a connection is established, the accept() method returns a new Socket object (clientSocket) that represents the communication link between the server and the connected client.
소켓에서 outputStream 연결되는거임.
Let me break this down:
clientSocket.getOutputStream(): This method gets the output stream associated with the clientSocket. An output stream is a stream through which data can be sent from the server to the connected client.
OutputStream serverOutputStream = ...: The obtained output stream is then assigned to the variable serverOutputStream. This variable can be used in the server code to write data that will be sent to the connected client.
나가는거는 속도보다 사용성 중시
보조스트림 PrintWriter를 쓰는데 거기에
serverOutputStream 넣어주면 보조스트림 기능들을 잘 쓸 수 있다.
true 기능 넣어주면 flush라는 기능을 쓸 수 있다고함.
while문 안에 bufferedReder로 읽고 readLine으로 한줄씩 읽고
원래 다 읽으면 null을 내보내서 null될때까지 읽으면 되는걸로 while문 써줌
readLine 컨트롤 따라가보면
Returns: 에 null if the end of the stream has been reached without reading any characters.
'PROGRAMMING > 슈퍼코딩 강의 정리' 카테고리의 다른 글
[슈퍼코딩] 63-1강 멀티쓰레딩 프로그래밍 (0) | 2023.12.16 |
---|---|
[슈퍼코딩] 62강 메소드 레퍼런스 사용하기 (0) | 2023.12.16 |
[슈퍼코딩] 58강 입출력 stream (0) | 2023.12.16 |
[슈퍼코딩] 57-2강 stream 사용하여 컬렉션 우아하게 사용하기 (0) | 2023.12.16 |
[슈퍼코딩] 2차 협업 프로젝트 (0) | 2023.12.16 |