Почему пишет при передачи информации через сокеты пишет "индекс находится вне границ массива" - C#

Узнай цену своей работы

Формулировка задачи:

Во время выполнения кода сервера, при получении данных они оказываются пустыми. Кто сможет объяснить эту непонятную для меня магию. Вот код клиента:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks;
 
namespace Пульт
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[] msg = { 0x7 };
            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Loopback, 5300);
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            Console.Write("Поиск сервера");
            Console.WriteLine();
            Console.Beep();
            s.Connect(ipEndPoint);
            Console.Write("Подключён к серверу");
            Console.WriteLine();
            Console.Write("Отправляю данные");
            Console.WriteLine();
            while (true)
            {
                s.Send(msg);
            }
            Console.Write(msg[0]);
            Console.Write(" Данные отправлены!");
            Console.WriteLine();
            s.Close();
        }
    }
}
И код сервера:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks;
 
namespace Приёмник_сокеты
{
    class Program
    {
        static void Main(string[] args)
        {
            IPAddress ipAddress = null; //IP-адресс
            IPEndPoint Addr = null; //конечная точка(IP и порт)
 
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //Создаем основной сокет
 
            byte[] input_data = new byte[s.Available];
            string input_text;
 
            Addr = new IPEndPoint(IPAddress.Any, 5300); //"localhost" = 127.0.0.1
            s.Bind(Addr); //"Адресуем" сокет
            s.Listen(10); //Обозначаем количество ожидающих в очереди на подключение
            Console.Write("Ждём подключение");
            Console.WriteLine();
            Socket cl_s = s.Accept(); //Ожидаем подключения
            Console.Write("Пользователь подключён!");
            Console.WriteLine();
            cl_s.Receive(input_data);
            Console.Write("Данные получены!");
            Console.WriteLine();
            if (input_data[0] == (byte)0x7)
            {
                Console.Write("Данные прошли проверку!");
            }
            else
            {
                Console.Beep();
                Console.Write("Данные не прошли проверку");
            }
            Console.WriteLine();
            cl_s.Close();
            s.Close();
        }
    }
}

Решение задачи: «Почему пишет при передачи информации через сокеты пишет "индекс находится вне границ массива"»

textual
Листинг программы
byte[] input_data = new byte[s.Available];

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5
Похожие ответы