2016-11-07 53 views
0

我必须向具有消息长度的服务器发送json消息,并且该长度将被添加到报头中。 像:{48} jsondata如何在UWP C中的TCP连接中的报头中添加消息长度C#

public async void SendMessageToServer(string message) 
     { 
      try 
      { 
       ing len= message.Length; 
       using (writer = new DataWriter(socket.OutputStream)) 
       { 
        writer.WriteString(message); 
        await writer.StoreAsync(); 
        await writer.FlushAsync(); 
        writer.DetachStream(); 
        ReadResponse(); 

       } 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 

回答

1

如果你想它,你只写它,你正在写的实际消息的消息之前的文字:

int len = message.Length; 
using (writer = new DataWriter(socket.OutputStream)) 
{ 
    writer.WriteString(len.ToString()); 
    writer.WriteString(message); 
    ... 

然而,这感觉,因为有点怪服务器将不得不查找数字,直到遇到非数字,然后阅读它们。你确定这是它的工作原理吗?通常的长度被作为一个二进制,其例如作为32位的长度将是:

int len = message.Length; 
using (writer = new DataWriter(socket.OutputStream)) 
{ 
    writer.WriteInt32(len); 
    writer.WriteString(message); 
    ... 
0

我去溶液长度将被添加作为消息和服务器头总是读该消息长度前5个字节。

using (DataWriter writer = new DataWriter(socket.OutputStream)) 
        { 
         string len = String.Format("{0:D4}", message.Length); 
         writer.WriteString(len + "" + message); 
         await writer.StoreAsync(); 
         await writer.FlushAsync(); 
         writer.DetachStream(); 
}