-1

Подскажите пожалуйста, как решить данную ошибку?

Для нестатического поля, метода или свойства "Client.Socket" требуется ссылка на объект

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using TLS.Crypto.Tls;
using TLS.Network;

namespace TLS.List
{
    internal class Client
    {
        public Socket Socket { get; set; }
        internal static Int64 TLSMessageCounter = 1;
        internal static Crypto Crypto = new Crypto();

        internal static void Send(string Message)
        {
            byte[] BytesMessage = Encoding.UTF8.GetBytes(Message);
            byte[] HMAC = new HMACSHA1(Crypto.ServerWriteMac).ComputeHash(Tools.HexToBytes(TLSMessageCounter.ToString("X16")+ "170301" + BytesMessage.Length.ToString("X4") + TLS.Network.Process.Bit(BytesMessage)));

            byte[] BytesWithHMAC = Tools.Concat(BytesMessage, HMAC);
            int index = BytesWithHMAC.Length + 20;

            int modulo = (BytesWithHMAC.Length + 1) % 16;
            byte paddingLength = (byte)(16 - modulo);
            BytesWithHMAC = Tools.Concat(BytesWithHMAC, new byte[] { paddingLength });

            for (int i = 0; i < paddingLength; i++) BytesWithHMAC = Tools.Concat(BytesWithHMAC, new byte[] { paddingLength });
            byte[] AesEncrypted = AesTool.Encrypt(BytesWithHMAC, Client.Crypto.ServerWriteKey, Client.Crypto.ServerWriteIV, PaddingMode.None);

            Socket.Send(Tools.HexToBytes("170301" + (AesEncrypted.Length).ToString("X4") + Process.Bit(AesEncrypted)));
            Array.Copy(AesEncrypted, AesEncrypted.Length - 16, Client.Crypto.ClientWriteIV, 0, 16);
            TLSMessageCounter++;
        }
    }
}
  • 1
    Вы пытаетесь использовать нестатическое свойство в статическом контексте – yolosora Feb 01 '18 at 10:35
  • Чтобы решить данную проблему достаточно не использовать экземплярные поля в статическом контексте. – tym32167 Feb 01 '18 at 10:36

1 Answers1

1

Вы пытаетесь из статического метода получить доступ к нестатическому члену, естественно это не работает. Уберите static из заголовка метода Send

  • Вы же понимаете, что ваше решение просто породит для автора другую проблему (NPE) – tym32167 Feb 01 '18 at 10:38
  • Ну это уже другой вопрос, может автор не привел кусок кода с конструктором, в котором создается экземпляр Socket – Андрей NOP Feb 01 '18 at 10:42
  • Я просто для ясности уточнил, что вы решите одну проблему, но код без создания сокета все равно не заработает. – tym32167 Feb 01 '18 at 10:44
  • 1
    @tym32167, для NRE есть эталонный дубликат – Grundy Feb 01 '18 at 10:46
  • Только не NPE, а NRE ;) – Андрей NOP Feb 01 '18 at 10:47
  • @Grundy я не пытаюсь дать второй ответ на это, я просто написал для автора вопроса, что когда он уберет static, у него вылетит вторая проблема, есть он не создает экзепляр сокета (имхо это можно было бы и в ответе упомянуть) - это все, что я хотел, больше ничего не хотел :) – tym32167 Feb 01 '18 at 10:50
  • @АндрейNOP да да, ну вы поняли :) – tym32167 Feb 01 '18 at 10:50