1.입출력 스트림을 이용하여 파일을 생성 해보고 글을 넣어보자
2.소캣 통신을 한번더 복습해보자
3.파일에 글자의 값을 넣을때 제이슨 형식으로 받아서 넣어보자
4.위에꺼 다합쳐서 소캣통신으로 글과 값으 보내면 txt파일에 제이슨 형식으로 값들가게 하자

소켓 서버 코드

package ch01;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

import org.json.simple.JSONObject;

public class SocketServer {

	ServerSocket serverSocket;
	Socket socket;
	BufferedReader bufferedReader;
	BufferedWriter bufferedWriter;
	MessageToConvert convert;

	public SocketServer() {
		System.out.println("서버 소캣 시작");
		FileOutputStream fos = null;
		JSONObject js = new JSONObject();
		try {
			fos = new FileOutputStream("output.txt");
			serverSocket = new ServerSocket(11000);
			socket = serverSocket.accept();
			System.out.println("클라이언트 연결 확인 (완료)");
			bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			bufferedWriter = new BufferedWriter(new FileWriter("output1.txt"));
			String getMsg = null;
			while (true) {
				getMsg = bufferedReader.readLine();
				String[] msgList = getMsg.split(" ");
				System.out.println("받은 메세지 : " + getMsg + "\n");
				js.put("name", msgList[0]);
				js.put("age", msgList[1]);
				js.put("address", msgList[2]);
				fos.write(js.toJSONString().getBytes());
				convert = new MessageToConvert(js);
				bufferedWriter.write(convert.convertMessage());
				bufferedWriter.flush();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new SocketServer();
	}

}

클라이언트 코드

package ch01;

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

public class SocketClient {

	final String IP = "localhost";
	Socket socket;
	BufferedWriter bufferedWriter;
	BufferedReader bufferedReader;

	public SocketClient() {
		try {
			System.out.println("1. 클라이언트 소켓 시작 ");
			socket = new Socket(IP, 11000);
			System.out.println("2. 소켓 서버 연결 완료");

			bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
			bufferedReader = new BufferedReader(new InputStreamReader(System.in));
			while (true) {
				System.out.println("글자를 입력 해주세요");
				String msg = bufferedReader.readLine();
				bufferedWriter.write(msg + "\n");
				bufferedWriter.flush();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				bufferedWriter.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

	public static void main(String[] args) {
		new SocketClient();
	}
}

제이슨 형식으로 글이 입력은 되지만 순서와 정확하게 띄어쓰기나 아쉬운 부분이 있었다.

제이슨 형식으로 이쁘게 변환을 해주는 클래스를 설계

package ch01;

import org.json.simple.JSONObject;


	public class MessageToConvert {
	    JSONObject object = new JSONObject();
	    public MessageToConvert(JSONObject object) {
	        this.object = object;
	    }
	    public String convertMessage(){
	        StringBuilder sb = new StringBuilder();
	        sb.append("{");
	        sb.append("\n\t" + "name: " + object.get("name") + ",\n");
	        sb.append("\t" + "age: " + object.get("age") + ",\n");
	        sb.append("\t" + "address: " + object.get("address") + "\n");
	        sb.append("}"+"\n");
	        return sb.toString();
	    }
	    
	}

이제 서버 소캣 부분을 보면 output.txt와 ,output1.txt 파일을 2개 생성 한다 

위의 결과값은 변환 클래스를 거치지 않고 바로 작성한 부분이고 변환클래스를 거쳐서 작성한값은 밑에 보시는 것처럼 작성이 된다

코드의 궁금하신 부분이 있는 분들은 댓글 달아주시면 답 드리겠습니다,,,,,,

저는 주말동안 자지못했던 부족한잠을 청해보도록 하겠습니다,,,,,,

+ Recent posts