seong

소켓 통신(3) - JSON 타입으로 데이터 받기 본문

자바/자바 실습

소켓 통신(3) - JSON 타입으로 데이터 받기

hyeonseong 2022. 8. 23. 17:19

1. Dto를 생성

 

2.Client 에서 Dto 객체 생성 

Gson 라이브러리 사용해 JSON 데이터로 전송

결과 화면 

Dto에 변수로 넣어둔 code,msg,data가 출력 되었다.


<소스코드>

Client

package sock.ex03;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

import com.google.gson.Gson;

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();
			// 어떤 메세지를 Dto에 담기
			MyDto dto = new MyDto(1,"통신성공",keyboardMsg);
			// 2. 데이터 직렬화
			Gson gson = new Gson();
			String sendData = gson.toJson(dto);
			
			
			bw.write(sendData +"\n");
			bw.flush();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		MyClientSocket mc = new MyClientSocket();
		mc.init();

	}

}

 

Server

package sock.ex03;

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 = "";
			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();
	}

}