Created
September 14, 2011 22:39
-
-
Save johnnykv/1218014 to your computer and use it in GitHub Desktop.
C#: Automates the process of prefixing a byte array with length before transmitting.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Johnny Vestergaard - 2011 | |
//jkv@unixcluster.dk | |
//Automates the process of prefixing a byte array with length before transmitting. | |
//The length is sent as a fixed sized integer. | |
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
using System.Net.Sockets; | |
namespace CalcCommunication | |
{ | |
public class NetworkStreamHelper | |
{ | |
NetworkStream networkStream; | |
public NetworkStreamHelper(NetworkStream networkStream) | |
{ | |
this.networkStream = networkStream; | |
} | |
public byte[] GetDataWithPrefix() | |
{ | |
byte[] buffer = new byte[4]; | |
networkStream.Read(buffer, 0, 4); | |
int lengthToReceiver = BitConverter.ToInt32(buffer, 0); | |
return GetData(lengthToReceiver); | |
} | |
public byte[] GetData(int bytesToReceive) | |
{ | |
byte[] buffer = new byte[bytesToReceive]; | |
int offset = 0; | |
int bytes_left = bytesToReceive; | |
//Rumor goes that .Read() is not guaranteed to block... | |
while (bytes_left > 0) | |
{ | |
int read = networkStream.Read(buffer, offset, bytes_left); | |
bytes_left = -read; | |
offset = +read; | |
} | |
return buffer; | |
} | |
public void SendDataWithLengthPrefix(byte[] data) | |
{ | |
Byte[] dataLength = BitConverter.GetBytes((int)data.Length); | |
networkStream.Write(dataLength, 0, 4); | |
networkStream.Flush(); | |
networkStream.Write(data, 0, data.Length); | |
networkStream.Flush(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment