클라이언트에선 JSON 객체를 만들어서 c# 서버로 보내는데요
JSONObject obj = new JSONObject();
// 패킷 생성 및 삽입
obj.put("packet", packet.PACK_CHATMSG.toString());
// 채팅 메세지 삽입
obj.put("chat", msgString);
이런식의 제이슨 객체를 만들어서 서버로 보내고 있습니다.
서버에선 이걸 버퍼를 스트링으로 바꿔준후 스트링을 다시 제이슨 객체로 제이슨 객체를 다시 제이슨콜렉션으로 바꿔준후
bufferCount = socket.Receive(buffer);
if (bufferCount == 0) break;
string Msgs = ASCIIEncoding.UTF8.GetString(buffer);
byte[] byteimsi = new byte[bufferCount]; // 남은버퍼 없애기용 임시byte
for (int i = 0; i < bufferCount; i++)
{
byteimsi[i] = buffer[i];
}
Msgs = ASCIIEncoding.UTF8.GetString(byteimsi);
JsonTextParser parser = new JsonTextParser();
JsonObject obj = parser.Parse(Msgs);
JsonObjectCollection col = (JsonObjectCollection)obj;
아래와 같이 패킷 분석을 하거든요
// 패킷 분석
switch ((string)col["packet"].GetValue())
{
case "PACK_CHATMSG" : {
.....
}
근대 여기 케이스문 안에선 채팅 메세지를 받았을경우
콜렉션 객체를 하나 다시 만들어서
string msg = (string)col["chat"].GetValue();
Console.WriteLine("클라이언트에서 받은 메세지" + msg);
// 전송 데이터 생성
ackCol.Add(new JsonStringValue("ack", "ACK_CHATMSG"));
ackCol.Add(new JsonStringValue("chat", msg));
이걸 ackCol.ToString()으로 쓴다는데 이게 콜렉션 객체라 그런지
클라이언트에서 받은 json객체와 규격(?)이 다르더라고요 같은 값을 넣었을경우
클라이언트에서 받은 json 객체는
"{\"chat\":\"adf\",\"packet\":\"PACK_CHATMSG\"}\n" 의 값을 갖고
ackCol.ToString()을 하면
"{\r\n\t\"ack\": \"ACK_CHATMSG\",\r\n\t\"chat\": \"ASDF\"\r\n}" 이와 같이 돼서
클라이언트에서 해당 값을 받아도 밸류값을 뽑아내지 못하더라고요
어떻게 해야 위와 같이 통일 시킬수있나요?




제 판단이지만 언어 및 제작 툴의 특성상 자동 변환시에 이스케이프 문이 붙어 버리는것 같군요.
클라이언트에서 받는 문자는
"{"ack":"ACK_CHATMSG","chat":"ASDF"}"
이런 문자면 됩니다. \n, \r, \t를 전부 공백으로 replace를 해주세요. \"는 상관없습니다.
\r\n 은 자바에서 \n과 같은 역할입니다. \r\n을 \n으로 변경하면 정상동작 할수도 있습니다.