Почему пишет при передачи информации через сокеты пишет "индекс находится вне границ массива" - 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];
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д