/// <summary> /// Reads data from the server. Receives the header packet first to know how many bytes to read. /// </summary> /// <returns>the data received from the server</returns> private byte[] ReadMessage() { //we need a byte buffer to store the header var headerBuffer = new byte[PacketHeader.Size]; //then we read into that buffer _socket.Receive(headerBuffer, PacketHeader.Size, SocketFlags.None); //and decode it into a header to know how many bytes we will receive next var header = PacketHeader.Decode(headerBuffer); if (header.DataLength <= 0) { throw new Exception("Length of header was zero"); } //we then make a buffer that will receive the data var dataBuffer = new byte[header.DataLength]; var size = (int)header.DataLength; var total = 0; //we might need to receive multiple packets to get all the data while (total < size) { var recv = _socket.Receive(dataBuffer, total, size - total, SocketFlags.None); if (recv == 0) { break; //maybe should handle this differently? } total += recv; } return(dataBuffer); }
/// <summary> /// Reads data from the server. Receives the header packet first to know how many bytes to read. /// </summary> /// <returns>the data received from the server</returns> private byte[] ReadMessage() { //we need a byte buffer to store the header var headerBuffer = new byte[PacketHeader.Size]; //then we read into that buffer _socket.Receive(headerBuffer, PacketHeader.Size, SocketFlags.None); //and decode it into a header to know how many bytes we will receive next var header = PacketHeader.Decode(headerBuffer); if (header.DataLength <= 0) { throw new Exception("Length of header was zero"); } //we then make a buffer that will receive the data var dataBuffer = new byte[header.DataLength]; if (_socket.Receive(dataBuffer, (int)header.DataLength, SocketFlags.None) != header.DataLength) { throw new Exception("Received wrong amount of bytes in " + nameof(ReadMessage)); } return(dataBuffer); }
/// <summary> /// Reads data from the server. Receives the header packet first to know how many bytes to read. /// </summary> /// <returns>the data received from the server</returns> private byte[] ReadMessage() { //we need a byte buffer to store the header var headerBuffer = new byte[PacketHeader.Size]; //then we read into that buffer _socket.Receive(headerBuffer, PacketHeader.Size, SocketFlags.None); //and decode it into a header to know how many bytes we will receive next var header = PacketHeader.Decode(headerBuffer); if (header.DataLength <= 0) { throw new IOException("Length of header was zero"); } //we then make a buffer that will receive the data var dataBuffer = new byte[header.DataLength]; var received = _socket.ReceiveFull(dataBuffer); if (received < dataBuffer.Length) { throw new IOException($"Received {received} bytes, expected {dataBuffer.Length}."); } return(dataBuffer); }