Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 06.01.2017
Сообщений: 29
1

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

19.04.2017, 20:30. Показов 537. Ответов 1

Во время выполнения кода сервера, при получении данных они оказываются пустыми. Кто сможет объяснить эту непонятную для меня магию. Вот код клиента:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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();
        }
    }
}
И код сервера:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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();
        }
    }
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2017, 20:30
Ответы с готовыми решениями:

"Индекс находится вне границ массива"
using System.Collections.Generic; using System.ComponentModel; using System.Data; using...

Почему не работает программа? Пишет: "Индекс находился вне границ массива"
{Дана последовательность натуральных чисел Aj j=1...n (n<=10000). Удалить из последовательности...

Ошибка "Индекс находится вне границ массива"
allval = Math.Round(usdValue, 2).ToString() + ";" + Math.Round(euroValue, 2).ToString(); ...

Ошибка: "индекс находится вне границ массива"
(индекс находится вне границ массива) program a; type matr=array of integer; mat1=array...

1
Администратор
Эксперт .NET
13779 / 11166 / 4557
Регистрация: 17.03.2014
Сообщений: 22,518
Записей в блоге: 1
19.04.2017, 21:55 2
arsuhinars, потому что в строке
C#
1
byte[] input_data = new byte[s.Available];
ты создаешь массив нулевой длины. Создай массив фиксированной длины.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2017, 21:55

Ошибка: "индекс находится вне границ массива"
не могу понять в чем ошибка, вводные данные 2 (размер массива) 3 1 (числа для сортировки) ошибку...

Сортировка массива подсчётом и ошибка "индекс находится вне границ массива"
Всем привет! В общем такое задание: Разработать 4 функции, реализующие задачу: "Сортировка...

"Индекс находился вне границ массива" при использовании Substring()
div.Id.Length=12 Тогда почему div.Id.Substring(4) выдает ошибку?

Ошибка "Индекс вне границ массива" при остановке процесса
Добрый день. Есть форма на ней кнопка, при нажатии на кнопку должен остановиться процесс, всё бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.