seong
소켓 통신 (2) - 메세지 여러개 받기 While 본문
메세지 받기
여러 메세지 받는 방법 - 읽기, 쓰기를 반복
1. Server - 데이터 받기, 출력
- Server에서 읽고 출력 하는 부분(br.readLine)을 while로 감싸준다.
- msg는 br.readLine하고 난 후 값을 담을 공간이다. (msg와 null을 비교 )
- 만약 msg가 없다면 버퍼를 비우고 null과 비교 하기 때문에 항상 null이 될 것이다.
2. Client - 데이터 전송 , 쓰기
- BufferReader로 데이터를 키보드로 입력 받아서 전송 (Scanner도 가능)
- 쓰고 전송하는 부분을 while로 감싸준다.
<소스코드>
Server
package sock.ex01;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
// 소켓은 os가 들고 있는 네이티브 함수를 빌려서 쓰게 된다.
public class MyServerSoket {
// 1.
ServerSocket serverSocket;// 서버 시작할때 new
public void init() {
System.out.println("서버시작--------------------");
//3.try문으로 감싸주기
try {
//2.서버 소켓 생성 : 서버와 연결을 위한 포트이다.
serverSocket = new ServerSocket(10000); // 0~ 65535 중에서 0~1023 well known port
//4. 서버소켓과 Socker는 다른 소켓이다. : 메세지 전달을 위한 역할
Socket socket = serverSocket.accept(); //accept는 리스너 역할, 소켓을 연결 시켜준다.
System.out.println("클라이언트 연결됨");
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
// 소켓을 계속 전달하고, 받기 위해선 쓰기와 받기에 while를 감싸주면 된다.
String msg = "";
// br.readLine에서 역슬래쉬 \를 주지 않으면 버퍼를 비우지 않는다.
while((msg = br.readLine()) != null) { // 버퍼안의 내용을 msg에 담고 만약 null이 아니면 실행
System.out.println("받은 메세지 " + msg);
if(msg.equals("bye")) {// 통신 종료
break;
}
}
System.out.println("서버 종료");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
MyServerSoket ms = new MyServerSoket();
ms.init();
}
}
Client
package sock.ex01;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class MyClientSocket {
Socket socket = new Socket();
public void init() {
try {
socket = new Socket("localhost", 10000);
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream()));
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
while(true) {
String keyboardMsg = br.readLine();
// 역슬래쉬는 엔터 역할을 수행
bw.write(keyboardMsg +"\n");
bw.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
MyClientSocket mc = new MyClientSocket();
mc.init();
}
}
'자바 > 자바 실습' 카테고리의 다른 글
소켓 통신(3) - JSON 타입으로 데이터 받기 (0) | 2022.08.23 |
---|---|
스레드 (비동기,동기) (0) | 2022.08.23 |
소켓 통신(1) - 메세지를 하나만 받기 (0) | 2022.08.23 |
URL 통신하기(naver.com 홈페이지) (0) | 2022.08.22 |
스트림(Stream) 통신 - BufferedReader,Writer (0) | 2022.08.22 |