2016-12-23 9 views
1

TCP/IP 프로토콜을 통해 서버와 통신하려고합니다.네트워크 응답을 C# 클래스로 매핑하는 방법은 무엇입니까?

private bool SendTcpRequest<T>(T request, Settings settings) 
    { 
     try 
     { 
      TcpClient client = new TcpClient(settings.Url, settings.Port); 

      byte[] data = null; 

      if (!string.IsNullOrEmpty(request.ToString())) 
       data = Encoding.ASCII.GetBytes(request.ToString()); 
      NetworkStream stream = client.GetStream(); 

      if (stream.CanWrite) 
       stream.Write(data, 0, data.Length); 
      else 
      { 
       return false; 
      } 

      if (stream.CanRead) 
      { 
       byte[] myReadBuffer = new byte[client.ReceiveBufferSize]; 
       IFormatter formatter = new BinaryFormatter(); 

       do 
       { 
        var numberOfBytesRead = stream.Read(myReadBuffer, 0, client.ReceiveBufferSize); 

        responseMessage = new StringBuilder(); 
        responseMessage.AppendFormat("{0}", Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead)); 
       } 
       while (stream.DataAvailable); 
      } 
      else 
      { 
       return false; 
      } 
      stream.Close(); 
      client.Close(); 
      return true; 
     } 
     catch (ArgumentNullException e) 
     { 
      return false; 
     } 
     catch (SocketException e) 
     { 
      return false; 
     } 
    } 

서버가 울부 짖는 소리 같은 응답을 보내드립니다 : : 여기 내 방법입니다 지금은 응답을 교류 # 클래스가

<TOPUPRESPONSE> 
    <RESULT>00</RESULT> // status of the transaction 
    <RESULTTEXT>transaction successful</RESULTTEXT> //description of the result code 
    <TERMINALID>69500002</TERMINALID> 
    <TXID>0803170919092</TXID> 
    <PRODUCTID>XYZ</PRODUCTID> 
</TOPUPRESPONSE> 

, 나는 내 수업에 대한 네트워크 응답을지도 할 수있는 방법 궁금하네요 . 나는 꽤 새로운데, 내 대답이 어떻게 생겼는지 모르겠다. 아무나 제발 좀 알려 주실 래요? 즉 당신이 작업 거라면

답변

2

이 휴식을 기반으로 클래스를 만듭니다

[XmlRoot(ElementName="TOPUPRESPONSE")] 
    public class TOPUPRESPONSE { 
     [XmlElement(ElementName="RESULT")] 
     public string RESULT { get; set; } 
     [XmlElement(ElementName="RESULTTEXT")] 
     public string RESULTTEXT { get; set; } 
     [XmlElement(ElementName="TERMINALID")] 
     public string TERMINALID { get; set; } 
     [XmlElement(ElementName="TXID")] 
     public string TXID { get; set; } 
     [XmlElement(ElementName="PRODUCTID")] 
     public string PRODUCTID { get; set; } 
    } 

그럼 그냥 클래스로하는 데이터에 사용할 수 직렬화 :

XmlSerializer serializer = new XmlSerializer(typeof(TOPUPRESPONSE)); 
MemoryStream memStream = new MemoryStream(Encoding.UTF8.GetBytes(inputString)); 
msg resultingMessage = (TOPUPRESPONSE)serializer.Deserialize(memStream); 

또는 StringReader를를 사용 :

XmlSerializer serializer = new XmlSerializer(typeof(TOPUPRESPONSE)); 
StringReader rdr = new StringReader(inputString); 
msg resultingMessage = (TOPUPRESPONSE)serializer.Deserialize(rdr);