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

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

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

Во время выполнения кода сервера, при получении данных они оказываются пустыми. Кто сможет объяснить эту непонятную для меня магию. Вот код клиента:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Net;
  6. using System.Net.Sockets;
  7. using System.Threading.Tasks;
  8. namespace Пульт
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. byte[] msg = { 0x7 };
  15. IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Loopback, 5300);
  16. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  17. Console.Write("Поиск сервера");
  18. Console.WriteLine();
  19. Console.Beep();
  20. s.Connect(ipEndPoint);
  21. Console.Write("Подключён к серверу");
  22. Console.WriteLine();
  23. Console.Write("Отправляю данные");
  24. Console.WriteLine();
  25. while (true)
  26. {
  27. s.Send(msg);
  28. }
  29. Console.Write(msg[0]);
  30. Console.Write(" Данные отправлены!");
  31. Console.WriteLine();
  32. s.Close();
  33. }
  34. }
  35. }
И код сервера:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Net;
  6. using System.Net.Sockets;
  7. using System.Threading.Tasks;
  8. namespace Приёмник_сокеты
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. IPAddress ipAddress = null; //IP-адресс
  15. IPEndPoint Addr = null; //конечная точка(IP и порт)
  16. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //Создаем основной сокет
  17. byte[] input_data = new byte[s.Available];
  18. string input_text;
  19. Addr = new IPEndPoint(IPAddress.Any, 5300); //"localhost" = 127.0.0.1
  20. s.Bind(Addr); //"Адресуем" сокет
  21. s.Listen(10); //Обозначаем количество ожидающих в очереди на подключение
  22. Console.Write("Ждём подключение");
  23. Console.WriteLine();
  24. Socket cl_s = s.Accept(); //Ожидаем подключения
  25. Console.Write("Пользователь подключён!");
  26. Console.WriteLine();
  27. cl_s.Receive(input_data);
  28. Console.Write("Данные получены!");
  29. Console.WriteLine();
  30. if (input_data[0] == (byte)0x7)
  31. {
  32. Console.Write("Данные прошли проверку!");
  33. }
  34. else
  35. {
  36. Console.Beep();
  37. Console.Write("Данные не прошли проверку");
  38. }
  39. Console.WriteLine();
  40. cl_s.Close();
  41. s.Close();
  42. }
  43. }
  44. }

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

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

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


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

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

7   голосов , оценка 3.571 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы