2016-08-15 2 views
0

я следующий класс заботиться УДП ОтсылаюUWP с UDP StreamWriter в формате OSC

public static async Task SendStringUdpAsync(HostName remoteHost, 
string remotePort, string message) 
    { 


     using (var socket = new DatagramSocket()) 
     { 
      var stream = (await socket.GetOutputStreamAsync(
       remoteHost, remotePort)).AsStreamForWrite(); 
      using (var writer = new StreamWriter(stream)) 
      { 
       await writer.WriteLineAsync(message.ToString()); 
       await writer.FlushAsync(); 
      } 
     } 
    } 

Но вместо того, чтобы отправить строку, я хочу, чтобы отправить собственный класс в УДП

public class OSCString : IOSCValue<string> 
{ 
    static int PaddingLength = 4; 

    public string Contents { get; } 
    public char TypeTag { get { return 's'; }} 
    public byte[] Bytes { get; } 



    public OSCString(string contents) 
    { 
     Contents = contents; 
     Bytes = GetBytes(); 
    } 

    public byte[] GetBytes() 
    { 
     byte[] bytes = new byte[GetByteLength()]; 
     Encoding.ASCII.GetBytes(Contents, 0, Contents.Length, bytes, 0); 
     return bytes; 
    } 

    public int GetByteLength() 
    { 
     return GetPaddedLength(Contents.Length); 
    } 

    public static int GetPaddedLength(int length) 
    { 
     int terminatedLength = length + 1; 
     int paddedLength = (int)(Math.Ceiling(terminatedLength/(float)PaddingLength) * 4); 
     return paddedLength; 
    } 

    public static OSCString Parse(BinaryReader reader) 
    { 
     List<byte> bytes = new List<byte>(); 
     byte current = reader.ReadByte(); 
     while(current != 0) 
     { 
      bytes.Add(current); 
      current = reader.ReadByte(); 
     } 
     string str = Encoding.ASCII.GetString(bytes.ToArray()); 
     OSCString oscString = new OSCString(str); 
     int bytesToBurn = oscString.Bytes.Length - bytes.Count - 1; 
     for(int i = 0; i < bytesToBurn; i++) 
     { 
      reader.ReadByte(); 
     } 
     return oscString; 
    } 


} 

я стараюсь DataWriter и StreamWrite, не работают слишком хорошо.

UWP выведет класс сокетов, есть ли Streamwrite, который может выполнить эту работу?

ответ

0

Я понять это

 var socket = new DatagramSocket(); 

     //socket.MessageReceived += SocketOnMessageReceived; 

     using (var stream = await socket.GetOutputStreamAsync(remoteHost, remotePort)) 
     { 
      using (var writer = new DataWriter(stream)) 
      { 
       // var data = Encoding.UTF8.GetBytes(message); 

       writer.WriteBytes(packet.Bytes); 
       writer.StoreAsync(); 
      } 
     } 

Все отлично работает !!!!!!!!!

Смежные вопросы