Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 30.12.2013
Сообщений: 2
.NET 4.x

Как отправить экземпляр структуры через сокет?

02.01.2014, 15:57. Показов 3002. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть определенная структура пакета, но я не понимаю, как по ней слать сам пакет..

Структура:
C#
1
2
3
4
5
6
7
8
9
857 BattleStart
{
int battle_id;
int map_type;
int battle_type;
unsigned int defender;
unsigned int attacker;
int end_time;
}
вот мой код:
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
static void Main(string[] args)
        {
            try
            {
                Console.Title = "[BattleManager]";
                string ServerHost = ("127.0.0.1");
                int GdeliverydPort = 29100;
 
                TcpClient tcpClient = new TcpClient(ServerHost, GdeliverydPort);
                NetworkStream netStream = tcpClient.GetStream();
 
                if (netStream.CanWrite)
                {
                    Console.Write("Ключ выполнения пожалуйсто: ");
                    switch(Console.ReadLine())
                    {
                        case ("+runwar"):
                        {
                            Вот тут надо отправить как то пакет по структуре
                            Console.WriteLine("Люди могут зайти на тв");
                            break;
                        }
                    }
                }
                else
                {
                    tcpClient.Close();
                    netStream.Close();
                    Console.WriteLine("Gdeliveryd socket error");
                    Environment.Exit(0);
                }
                netStream.Close();
            }
 
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Environment.Exit(0);
            }
        }
Сам понимаю, как послать пакеты только такого плана:

C#
1
2
 Byte[] sendBytes = Encoding.UTF8.GetBytes("Hi");
 netStream.Write(sendBytes, 0, sendBytes.Length);
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.01.2014, 15:57
Ответы с готовыми решениями:

Как отправить данные на url через сокет и получить ответ
Подскажите пожалуйста как отправить данные на url и получить ответ, а то у меня что то не очень хорошо получается. Заранее благодарю.

Отправить сериализованный объект через сокет по UDP
Доброй ночи, уважаемые форумчане! Нужна консультация по отправке сериализованного объекта по UDP-протоколу (размер файла невелик, файл...

ResultSet отправить через сокет
Вот такое дело... Есть клиент, есть сервер, клиент подключился к серверу и спросил: select * from database_1 Сервер взял такой,...

6
208 / 164 / 29
Регистрация: 11.09.2013
Сообщений: 445
02.01.2014, 16:18
наткнулся недавно на приятный в обращении код. пользуйте наздоровье:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        /// <summary>
        /// Получает массив байт, соответствующий переданной структуре
        /// </summary>
        /// <typeparam name="T">Тип структуры для преобразования</typeparam>
        /// <param name="value">Экземпляр структуры для преобразования</param>
        /// <returns>Массив байт, соответствующий переданной структуре</returns>
        static byte[] StructToBuff<T>(T value) where T : struct
        {
 
            byte[] arr = new byte[Marshal.SizeOf(value)]; // создать массив
            GCHandle gch = GCHandle.Alloc(arr, GCHandleType.Pinned); // зафиксировать в памяти
            IntPtr ptr = Marshal.UnsafeAddrOfPinnedArrayElement(arr, 0); // и взять его адрес
            Marshal.StructureToPtr(value, ptr, true); // копировать в массив
            gch.Free(); // снять фиксацию
            return arr;
 
        }
1
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
02.01.2014, 17:27
vityadev, принимающая сторона тоже на C#?
0
0 / 0 / 0
Регистрация: 30.12.2013
Сообщений: 2
02.01.2014, 19:03  [ТС]
Да, все на шарпе

Добавлено через 12 минут
Принимающую сторону изменять нельзя. Она уже в закомпилированом состоянии, скорее всего C++. Сам вопрос был о том, как послать пакет на сервер по определенной структуре. Облазил гугл, учебники, решения не нашел, вот и задал вопрос)
0
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
03.01.2014, 00:36
Для начала надо понять формат, в котором принимает данные принимающая сторона. Иначе можно долго в угадайку играть.
0
208 / 164 / 29
Регистрация: 11.09.2013
Сообщений: 445
03.01.2014, 01:05
и, кстати, добавьте к структуре атрибут StructLayout(LayoutKind.Sequential), чтобы запретить среде перемещать поля структуры в ее пределах (т.е. чтобы они не менялись местами). может, это решит проблему
0
Заблокирован
03.01.2014, 05:37
Используйте JSON конвертируйте обьект в строку и передавайте. Newtonsoft хороший конвертор.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.01.2014, 05:37
Помогаю со студенческими работами здесь

Отправить GET запрос через сокет
Нужно сохранить картинку полученную с помощью гет запроса через команду: ./clientTCP https://i.**********/5dprNTj.jpg &gt; img.jpg ...

Передача структуры через сокет
Привет всем. Подскажите пожалуйста, где я мок на косячить. Потому что я уже бомбить начинаю... клиент#include &lt;sys/types.h&gt; ...

Отправить экземпляр треугольника в класс
здравствуйте ! как отправить экземпляр треугольника в класс и оттуда добавить на сцену подскажите пожалуйста ?

Как передать файл через сокет
здравствуйте! Выполнил сериализацию данных в файл. Теперь нужно этот файл передать серверной части программы. Для выбора файла...

Как открыть файл через сокет
Имеется программа которая запрашивает у пользователя имя и пароль и сверяется с базой данных(тестовый файл). Путь к этому текстовому...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru