2017-08-08 69 views
0

我建立的應用程序,如在.net核心和角的實時聊天。 一切工作正常,但存儲recived消息的buffor在內容後有空字節。Buffor由空值填充。網絡核心.net核心

我的buffor有1024個字節的大小。 但是,如果消息具有例如60個字節,則其餘部分由空值填充。

我是否應該將recived消息重寫到新的緩衝區(具有適當的大小),然後再發送這個新的緩衝區? (此方法我現在用的)

下面是我recive方法:

private async Task Recive(WebSocket socket, Action<WebSocketReceiveResult, byte[]> handle) //original 
{ 
    while(socket.State == WebSocketState.Open) 
    { 
     var buffer = new byte[1024]; 
     var result = await socket.ReceiveAsync 
     (
      buffer: new ArraySegment<byte>(buffer), 
      cancellationToken: CancellationToken.None 
     ); 

     handle(result, buffer); 
    } 
} 

句柄是一個被稱爲後,應用程序收到
數據功能。

回答

0

緩衝區就是這樣一個緩衝區,因此如果它大於實際數據,它將不會自動調整大小。你可以試試:

private async Task Receive(WebSocket socket, Action<WebSocketReceiveResult, byte[]> handle) //original 
{ 
    while(socket.State == WebSocketState.Open) 
    { 
     var buffer = new ArraySegment<byte>(new byte[1024]); 
     var result = await socket.ReceiveAsync 
     (
      buffer: buffer, 
      cancellationToken: CancellationToken.None 
     ); 

     var resized = new byte[buffer.Count]; 
     Array.Copy(buffer.Array, buffer.Offset, resized, 0, buffer.Count); 
     handle(result, resized); 
    } 
} 

請注意,如果您收到一條消息,是大於1024個字節的代碼將無法正常工作。您可以檢查正確的方式來檢索郵件的全部內容(以及如何進一步處理):https://stackoverflow.com/a/23784968/2698119