Re[3]: Binary(Writer/Reader)
От: Vadim B  
Дата: 19.06.03 15:31
Оценка:
Здравствуйте, VladD2, Вы писали:

VB>>А как с помощью BinaryReader прочитать null-terminated string? А int32 с обратным порядком байтов (как при пересылке принято)? Если руками, то тогда не очень-то и проще получается.


VD>Если с обоих сторн дотнет, то нефига париться. BinaryReader будет читать и писать днные одинаково. В дотнете попросту нет "null-terminated string". В нем есть просто строка. И BinaryReader/BinaryWriter прекрасно умеет их писать. Вот только они юникодные.


Если с обеих сторон дотнет — то да. Я имел в виду свою ситуацию, когда есть некоторый сетевой протокол, в котором фигурируют и null-terminated strings, и int с сетевым (обратным интелловскому) порядком байт, а с другой стороны может быть что угодно — дотнет, MFC, Java, или фиговинка на микроконтроллере.
Re[4]: Binary(Writer/Reader)
От: mihailik Украина  
Дата: 19.06.03 15:40
Оценка:
VB>Если с обеих сторон дотнет — то да. Я имел в виду свою ситуацию, когда есть некоторый сетевой протокол, в котором фигурируют и null-terminated strings, и int с сетевым (обратным интелловскому) порядком байт, а с другой стороны может быть что угодно — дотнет, MFC, Java, или фиговинка на микроконтроллере.

Ну так посмотри, как BinaryReader/Writer устроен. И переделай.
... << RSDN@Home 1.0 beta 7a >>
Re[3]: Как это можно сделать в C#?
От: Nick Notabene Россия  
Дата: 19.06.03 16:58
Оценка:
Сорри за глупый вопрос..
... Skipped
AVK>>Для классов и структур все немножко посложнее
AVK>>
AVK>>//Твою структурку надо пометить как сериализуемую
AVK>>...

AVK>>//Ну а далее выбираешь сериализатор и вперед
AVK>>


M>Можно быстрее и дешевле, используя System.Runtime.InteropServices.Marshal и его методы StructureToPtr и Copy.

... Skipped

Люди, простите меня глупого. Неужели это правда быстрее и дешевле, чем одна структура и функия send ???
2Ed.ward — а чем был плох первоначальный вариант ?
private struct s
{
public bool Move;
public int xPos;
public int yPos;
}
s tmp;

и массив байтов
byte[]=new byte[n];

send(...)
Интуитивно понятный интерфейс — это интерфейс, для работы с которым нужна недюжинная интуиция...
Re[4]: Как это можно сделать в C#?
От: Ed.ward Россия  
Дата: 19.06.03 17:03
Оценка:
Здравствуйте, Nick Notabene, Вы писали:

NN>Люди, простите меня глупого. Неужели это правда быстрее и дешевле, чем одна структура и функия send ???

NN>2Ed.ward — а чем был плох первоначальный вариант ?
NN>private struct s
NN>{
NN>public bool Move;
NN>public int xPos;
NN>public int yPos;
NN>}
NN>s tmp;

NN>и массив байтов

NN>byte[]=new byte[n];

NN>send(...)


Не совсем понял, первоначальный вариант это с сеарилизацией с помощью BinaryFormatter?

Ed.ward
... << RSDN@Home 1.0 beta 7a >>
Re[4]: Как это можно сделать в C#?
От: mihailik Украина  
Дата: 19.06.03 17:06
Оценка:
NN>Люди, простите меня глупого. Неужели это правда быстрее и дешевле, чем одна структура и функия send ???

Кто такой, почему не знаю?
... << RSDN@Home 1.0 beta 7a >>
Re[7]: Как это можно сделать в C#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.06.03 21:23
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Binary Object Reader поможет.


Как я понял он не универсален. Для него нужна особая раметка. И еще не ясно что у него со скоростью. Скорее всего он не намного быстрее чем форматеры.
... << RSDN@Home 1.1 alpha 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Binary(Writer/Reader)
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.06.03 21:23
Оценка: 1 (1)
Здравствуйте, mihailik, Вы писали:

M>Ну так посмотри, как BinaryReader/Writer устроен. И переделай.


Зачем переделывать? Только написать обертку которая будет писть строки чуть по другому.
... << RSDN@Home 1.1 alpha 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Как это можно сделать в C#?
От: mihailik Украина  
Дата: 20.06.03 15:47
Оценка:
M>Binary Object Reader поможет.

VD>Как я понял он не универсален. Для него нужна особая раметка. И еще не ясно что у него со скоростью. Скорее всего он не намного быстрее чем форматеры.


Насчёт разметки — примерно как с Marshal, нужна когда что-то особенное.

Скорость — ясное дело — плохая, там же Reflection.
... << RSDN@Home 1.0 beta 7a >>
Re[5]: Как это можно сделать в C#?
От: Nick Notabene Россия  
Дата: 20.06.03 16:21
Оценка: -1
... Skipped
Гы. Читаю я эту нитку и кажется мне что лечение много хуже болезни...
Ed.ward, у тебя и отправитель и получатель знают формат структуры и буфера ?
Зачем тогда весь этот многопудовый геморрой ???


M>Кто такой, почему не знаю?


Есть такая фунция send, в ws2_32.dll Если уж необходимо делать все на С#, то [DllImport] ваше спасение...

Прав был Оккам, сто раз прав, и неудержимый рост глюкавых приложений под .Net наглядное тому подтверждение...

Гы.
Интуитивно понятный интерфейс — это интерфейс, для работы с которым нужна недюжинная интуиция...
Re[5]: Как это можно сделать в C#?
От: Nick Notabene Россия  
Дата: 20.06.03 16:25
Оценка:
Здравствуйте, Ed.ward, Вы писали:
EW>Не совсем понял, первоначальный вариант это с сеарилизацией с помощью BinaryFormatter?

Гы. Читаю я эту нитку и кажется мне что лечение много хуже болезни...
Ed.ward, у тебя и отправитель и получатель знают формат структуры и буфера ?
Зачем тогда весь этот многопудовый геморрой ???


M>Кто такой, почему не знаю?


Есть такая фунция send, в ws2_32.dll Если уж необходимо делать все на С#, то [DllImport] ваше спасение...

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

Гы.


EW>Ed.ward
Интуитивно понятный интерфейс — это интерфейс, для работы с которым нужна недюжинная интуиция...
Re[6]: Как это можно сделать в C#?
От: Gollum Россия  
Дата: 21.06.03 05:51
Оценка: +1
Здравствуйте, Nick Notabene, Вы писали:

M>>Кто такой, почему не знаю?


NN>Есть такая фунция send, в ws2_32.dll Если уж необходимо делать все на С#, то [DllImport] ваше спасение...


using System.Net.Sockets;

Sockуt sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
// ... connecting or anyway

sock.Send(/* blabla */);


NN>Прав был Оккам, сто раз прав, и неудержимый рост глючных приложенийпод .Net наглядное тому подтверждение...


Точно, прав Я воздержусь от высказываний про глючные приложения под апи
... << RSDN@Home 1.0 beta 6a >>
Eugene Agafonov on the .NET

Re[7]: Как это можно сделать в C#?
От: Nick Notabene Россия  
Дата: 21.06.03 07:40
Оценка: :)
Здравствуйте, Gollum, Вы писали:

G>
G>using System.Net.Sockets;

G>Sockуt sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
G>// ... connecting or anyway

G>sock.Send(/* blabla */);
G>


Угу. По идее, вызывается тот же ws2_32.dll. Но ради бога, объясните мне, почему при передаче бинарных данных элементарной программкой на VC6 загрузка сети 3%, процессора — 5 %, а при Socket.Send — 9% и 12% соответсвтенно ? Одни и те же данные, один и тот же алгоритм...

G>Точно, прав Я воздержусь от высказываний про глючные приложения под апи


RSDN написан на .Net как я понимаю ? Откуда три и два сообщения там, где отправлялось по одному ???
Вчера два раза посмотрел на заставку "invalid input string",и все дела.

.Net помимо потери производительности, статистически неустоцчив. Если алгоритм сработал 99 раз, нет никакой гарантии, что в 100 раз он сработает так же. Любой, даже самый простой алгоритм, использующий System.Net , System.Runtime, становится нестабильным и непредсказуемым.
Интуитивно понятный интерфейс — это интерфейс, для работы с которым нужна недюжинная интуиция...
Re[6]: Как это можно сделать в C#?
От: Ed.ward Россия  
Дата: 21.06.03 10:59
Оценка:
Здравствуйте, Nick Notabene, Вы писали:

NN>Здравствуйте, Ed.ward, Вы писали:

EW>Не совсем понял, первоначальный вариант это с сеарилизацией с помощью BinaryFormatter?

NN>Гы. Читаю я эту нитку и кажется мне что лечение много хуже болезни...

NN>Ed.ward, у тебя и отправитель и получатель знают формат структуры и буфера ?
NN>Зачем тогда весь этот многопудовый геморрой ???


M>Кто такой, почему не знаю?


NN>Есть такая фунция send, в ws2_32.dll Если уж необходимо делать все на С#, то [DllImport] ваше спасение...


NN>Прав был Оккам, сто раз прав, и неудержимый рост глючных приложенийпод .Net наглядное тому подтверждение...


NN>Гы.




Если бы я хотел пользоваться функцией send из ws2_32.dll напрямую, я писал бы программу на С++ с которым работаю вот уже 6 лет.
Мне интересно написать программу под .NET чистенькую чтоб всем спецификациям соответствовала...
Именно интересно а не нужно.

Ed.ward
... << RSDN@Home 1.0 beta 7a >>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.