Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для virusnyak333
23 / 23 / 0
Регистрация: 09.11.2014
Сообщений: 72

TcpListener, отправка массива байт: ошибка преобразования типов

27.02.2015, 19:11. Показов 1709. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Требуется массив отправить на сервер, преобразую массив в массив байт, но при отправке выдает ошибку.
Ошибка: "не может преобразовать ' Byte [] []' выражение типа ` байт [] '"
Ошибка в строке 10
C#
1
2
3
4
5
6
7
8
9
10
      //Преобразуем массив в массив байт
      byte[][] data = new byte[message.Length][];
      for (int i = 0; i < message.Length; i++)
     {
     data[i] = GetBytes(message[i]);
      }
     // Получаем поток для чтения и записи данных.
     NetworkStream stream = client.GetStream();
     // Отправляем сообщение нашему серверу. 
     stream.Write(data, 0, data.Length);
Как можно решить проблему ?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.02.2015, 19:11
Ответы с готовыми решениями:

Ошибка преобразования типов
помогите пожалуйста program prim; var a1:real; y:integer; a:=0.167; x:=2.248; function f(q,p:real):real; begin ...

Ошибка преобразования типов
сразу после нажатия btn_matr выходит ошибка &quot; ''-не интеджер &quot; Form1: TForm1; n,i,j:byte; max:integer; ...

Ошибка преобразования типов
Захотелось создать что-то простенькое, меняющее символы в строке и столкнулся с незнанием в преобразовании типов. void another() { ...

13
418 / 316 / 241
Регистрация: 29.05.2010
Сообщений: 796
Записей в блоге: 1
27.02.2015, 19:25
virusnyak333, например писать tream.Write(data[0], 0, data[0].Length);
0
 Аватар для virusnyak333
23 / 23 / 0
Регистрация: 09.11.2014
Сообщений: 72
27.02.2015, 19:34  [ТС]
Цитата Сообщение от kypiwindy Посмотреть сообщение
virusnyak333, например писать tream.Write(data[0], 0, data[0].Length);
А одним пакетом отправить массив как-то можно ?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
27.02.2015, 21:05
Цитата Сообщение от virusnyak333 Посмотреть сообщение
Как можно решить проблему ?
C#
1
2
3
4
5
6
7
8
            //Преобразуем массив в массив байт
            var data = new List<byte>();
            for (int i = 0; i < message.Length; i++)
                data.AddRange(GetBytes(message[i]));
 
            // Получаем поток для чтения и записи данных.
            using(var stream = client.GetStream())
                stream.Write(data.ToArray(), 0, data.Count);// Отправляем сообщение нашему серверу.
1
 Аватар для virusnyak333
23 / 23 / 0
Регистрация: 09.11.2014
Сообщений: 72
27.02.2015, 21:32  [ТС]
А как на сервере это обратно вернуть в массив string ?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
27.02.2015, 21:37
Цитата Сообщение от virusnyak333 Посмотреть сообщение
А как на сервере это обратно вернуть в массив string ?
Нужно отправлять с разделителями. А на сервере делить на строки по разделителю.
А еще нужно отправлять общую длину сообщения, что бы сервер знал сколько байт ему ждать.
1
 Аватар для virusnyak333
23 / 23 / 0
Регистрация: 09.11.2014
Сообщений: 72
27.02.2015, 21:46  [ТС]
Можно простенький пример клиент-сервер ?
Клиент отправляет массив string[] a = {"Один", "Два", "Три"}
Сервер выводит полученный массив
C#
1
2
3
4
for (int i = 0; i < a.Length; i++)
{
Console.WriteLine(a[i]);
}
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
27.02.2015, 22:04
Лучший ответ Сообщение было отмечено virusnyak333 как решение

Решение

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
using System.Threading;
 
namespace ConsoleApplication158
{
    class Program
    {
        static void Main(string[] args)
        {
            new Thread(ServerLoop) { IsBackground = true }.Start();
            new Thread(ClientLoop) { IsBackground = true }.Start();
 
            Console.ReadLine();
        }
 
        static void ServerLoop()
        {
            var list = new TcpListener(24432);
            list.Start();
            
            using (var tcp = list.AcceptTcpClient())
            using (var stream = tcp.GetStream())
            {
                //принимаем длину сообщения
                var buffer = new byte[4];
                stream.Read(buffer, 0, 4);
 
                //принимаем сообщение
                var length = BitConverter.ToInt32(buffer, 0);
                var bytes = new List<byte>();
                while (bytes.Count < length)
                    bytes.Add((byte)stream.ReadByte());
 
                //преобразуем в строку, сплитуем по разделителю
                var str = Encoding.Default.GetString(bytes.ToArray());
                var array = str.Split('\x0');
 
                foreach (var s in array)
                    Console.WriteLine(s);
            }
        }
 
        static void ClientLoop()
        {
            var array = new string[] { "авава", "fdfds", "ававы" };
            var bytes = new List<byte>();
 
            foreach(var item in array)
                bytes.AddRange(Encoding.Default.GetBytes(item + "\x0"));
 
            using (var tcp = new TcpClient("localhost", 24432))
            using ( var stream = tcp.GetStream())
            {
                //отправляем длину сообщения
                stream.Write(BitConverter.GetBytes(bytes.Count), 0, 4);
                //отправляем сообщение
                stream.Write(bytes.ToArray(), 0, bytes.Count);
            }
        }
    }
}
1
 Аватар для virusnyak333
23 / 23 / 0
Регистрация: 09.11.2014
Сообщений: 72
28.02.2015, 00:15  [ТС]
А как клиенту ответ отправить ?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
28.02.2015, 03:04
Цитата Сообщение от virusnyak333 Посмотреть сообщение
А как клиенту ответ отправить ?
Отправляете в stream:

C#
1
stream.Write(answer.ToArray(), 0, answer.Count);
0
 Аватар для virusnyak333
23 / 23 / 0
Регистрация: 09.11.2014
Сообщений: 72
28.02.2015, 14:58  [ТС]
Сделал так
C#
1
2
3
 string data = "otvet";
byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);
                    stream.Write(msg, 0, msg.Length);
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
28.02.2015, 15:41
Цитата Сообщение от virusnyak333 Посмотреть сообщение
Сделал так
Необходимо еще отправлять длину сообщения.
0
 Аватар для virusnyak333
23 / 23 / 0
Регистрация: 09.11.2014
Сообщений: 72
01.03.2015, 02:48  [ТС]
C#
1
2
3
4
  
string data = "otvet";
byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);
stream.Write(msg, 0, msg.Length);
Я так отправляю
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
01.03.2015, 04:13
Цитата Сообщение от virusnyak333 Посмотреть сообщение
Я так отправляю
Нет, вы отправялете само сообщение. А нужно перед этим отправлять длину сообщения.
Посмотрите внимательно как у меня сделана отправка сообщения на сервер. Сначала отправляется длина сообщения, а потом само сообщение:
C#
1
2
3
4
                //отправляем длину сообщения
                stream.Write(BitConverter.GetBytes(bytes.Count), 0, 4);
                //отправляем сообщение
                stream.Write(bytes.ToArray(), 0, bytes.Count);
Если вы не отправите длину сообщения, принимающая сторона не будет знать сколько байт следует ожидать и не сможет прнять все сообщение целиком.
На малых пакетах и на локальном хосте это не заметно, но когда вы будете слать сообщения между компьютерами в сети, пакеты буду фрагментироваться и приходить кусками. Вот здесь и понадобится знать длину сообщения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.03.2015, 04:13
Помогаю со студенческими работами здесь

Ошибка преобразования типов
В чем именно я ошибся,если код ошибки #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;string&gt; #include &lt;ctype.h&gt; ...

Ошибка преобразования типов
Доброго времени суток. Процедура читает массив из типизированного файла: procedure Read_Ar(f: file of integer; var x: ar);//type ar =...

Ошибка преобразования типов
List&lt;string&gt; masBuf1 = new List&lt;string&gt;; for(int i=0; i&lt;n; i++) for(int j=0; j&lt;m; j++) { ...

Ошибка преобразования типов
И так. Есть у меня метод: public void chat1(Class3 args) { //МНОГАБУКАФ string text = &quot;&quot;; string text1 = text + &quot;...

Ошибка автоматического преобразования типов
import javax.swing.*; class MyClass { int num; char symb; String text; // Перегружаем конструктор класса MyСlass ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru