Skip to content

Instantly share code, notes, and snippets.

@johnnykv
Created September 14, 2011 22:39
Show Gist options
  • Save johnnykv/1218014 to your computer and use it in GitHub Desktop.
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.
//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