2016-08-15 22 views
0

我有以下類保重UDP發送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(); 
      } 
     } 
    } 

但相反發送一個字符串,我想送一個自定義的類UDP

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(); 
      } 
     } 

一切都很正常!!!!!!!!!