내 아이디어 -> 클라이언트 서버 시스템은 TCP 소켓을 통해 텍스트 메시지 (문자열)를 교환합니다. XML을 기반으로 클라이언트와 서버 간의 프로토콜을 원합니다. 소켓 사이의 정보는 byte
으로 전송되므로 전송해야합니다. 그래서 여기 내가 어떻게하는지 : 클래스 의 속성을 가진 TheMessage
클래스. 객체의 속성으로 전송할 문자열을 해당 클래스의 객체로 만들고 Object
에서 byte[]
부터 XmlSerialization
으로 만듭니다. 다른면에서 나는 그 반대의 과정을 밟는다. 내가 직렬화와 클라이언트에서 서버로 전송하는 방법이 있습니다 :소켓을 통한 객체의 XML 직렬화
msg.Message = Console.ReadLine();
byte[] writeBuff = XmlRefacrotClient.ObjectToByteArray(msg);
Stream stm = client.GetStream();
stm.Write(writeBuff, 0, writeBuff.Length);
이 내가 직렬화에 사용하는 방법이다 : 나는이 데이터를 수신하는 방법
public static byte[] ObjectToByteArray(TheMessage obj)
{
try
{
MemoryStream ms = new MemoryStream();
XmlSerializer xmlS = new XmlSerializer(typeof(Message.TheMessage));
XmlTextWriter xmlTW = new XmlTextWriter(ms, Encoding.UTF8);
xmlS.Serialize(xmlTW, obj);
ms = (MemoryStream)xmlTW.BaseStream;
return ms.ToArray();
}
catch(Exception)
{
throw;
}
}
입니다 서버 측 :
byte[] readBuff = new byte[1024];
s.Receive(readBuff);
String str = (XmlRefactorServer.ByteArrayToObject(readBuff)).ToString();
Console.WriteLine(str);
이 드 - 직렬화하는 방법입니다 : ByteArrayToObject
의 return
가 return xmlS.Deserialize(ms);
줄에 설명 There is an error in XML document (0, 0).
로 InvalidOperationException
을 얻을 곤하는 법까지
public static Object ByteArrayToObject(byte[] arr)
{
try
{
XmlSerializer xmlS = new XmlSerializer(typeof(Message.TheMessage));
MemoryStream ms = new MemoryStream();
XmlTextWriter xmlTW = new XmlTextWriter(ms, Encoding.UTF8);
return xmlS.Deserialize(ms);
}
catch(Exception)
{
throw;
}
}
모든 것이 원활하게 실행됩니다.
제안 사항?
바이트 배열을 가져 와서 문자열로 변환 했습니까? 아마 당신은 그것이 보이는 것을 볼 수 있다면 XML에서 오류를 발견 할 수 있습니다. – guysherman
먼저 문자열 -> 바이트 배열 -> 문자열 (연결 자체를 테스트하기 위해)을 변환하여 작업을 수행했지만 정상적으로 작동했습니다. 나는 양쪽 방향으로 메시지를주고 받았다. – Milkncookiez