Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
26.05.2013, 16:12
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
Добрый день! А кто скажет как можно десериализовать прямо из сокета? Или вопрос по другому - как по TCP сокетам передавать произвольный DataSet, размер которого заранее неизвестен? вот как делаю через память: Код: c# 1. 2. 3. 4. 5. 6.
я уже почти близко к цели, только когда было Код: c# 1. 2.
- небольшие датасеты без проблем десериализовались, а когда данных стало чутка поболее, полетели эксепшены... вот как можно сделать так, чтобы прямо из сокета объект десериализовался? Конструкция Код: c# 1.
не совсем правильная, так как ожидает аргумента другого класса, а у меня clientSocket - это TcpClient ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 16:14
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
5 сек - одна задумка есть! - пробую! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 16:16
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
Код: c# 1.
так вот написал, но нет десериализации походу... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 16:25
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
че-то кажется что написал некий бред, так как C# не знаю, сокетов не знаю.... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 17:40
|
|||
---|---|---|---|
C# DataSet |
|||
#18+
Сначала нужно сериализовать, затем конвертировать в byte[]/поток и только потом отправлять. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 18:00
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
skoleСначала нужно сериализовать, затем конвертировать в byte[]/поток и только потом отправлять. спасибо за информацию - я давно это сделал! проблема в том, что если датасет небольшой - все работает как надо, а если немного больше записей - нифига не работает - чувствую, что это как-то связано с размером пакетов, или я неправильно принимаю: Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 18:01
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
как десериализовать датасеты грамотно? любого размера... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 18:13
|
|||
---|---|---|---|
C# DataSet |
|||
#18+
Проверь размер буфера на входе NetworkStream или читай и заполняй его снова в лупе while ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 18:15
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
skoleПроверь размер буфера на входе NetworkStream или читай и заполняй его снова в лупе while 8192 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 18:22
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
а аообще грамотно как датасет десериализовать? Код: c# 1. 2. 3.
если в итоге датасет в один пакет не влезет - клиенту будет отправленое несколько пакетов? - то есть сколько бы данных ни было - они в данном случае пакетами уйдут абсолютно все, и их нужно будет читать в цикле, проверяя, есть ли данные? то есть эта конструкция датасет целиком вытолкает в сеть? если да, то как тогда десериализовать - где хранить промежутобайты? - если в массиве, то как заранее узнать размер массива? вообщем я вообще ноль в C# поэтому задаю лавину наиглупейших вопросов... может кто подскажет простой пример принятия данных заранее неизвестного размера и десериализации оного объекта? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 18:42
|
|||
---|---|---|---|
C# DataSet |
|||
#18+
Во-первых, подумай, зачем тебе использовать целый датасет, это достаточно громоздкий объект со своими тараканами, используй что-нибудь попроще, какой-нибудь базовый объект, например DataTable, а лучше типизированную коллекцию, вида List<MyClass>. Затем пометь атрибутами нужные поля в случае коллекции, сериализируй, отправляй в потоке по TCP. На сервере читай входящий поток, если он большой, складывай во временный буфер byte[], как поток будет весь принят, отправляй на десериализацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 18:52
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
skoleВо-первых, подумай, зачем тебе использовать целый датасет, это достаточно громоздкий объект со своими тараканами, используй что-нибудь попроще, какой-нибудь базовый объект, например DataTable, а лучше типизированную коллекцию, вида List<MyClass>. Затем пометь атрибутами нужные поля в случае коллекции, сериализируй, отправляй в потоке по TCP. На сервере читай входящий поток, если он большой, складывай во временный буфер byte[], как поток будет весь принят, отправляй на десериализацию. все намного прозаичней - диплом делаю студенту - так там условие - клиент не знает ничего о БД, обращается к серверу (такое крохотное приложение), а сервер шлет в зависимости от того, о чем попросил клиент , запросы на сервак.... так я уже думаю - наверно проще построчно передать клиенту результат запроса - какая разница, если на клиенте нет вообще работы с БД может так логичней будет? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 19:13
|
|||
---|---|---|---|
C# DataSet |
|||
#18+
Galadriel75, .. еще проще будет формировать csv-файл, да и отдавать его клиенту ... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 19:15
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
carrotikGaladriel75, .. еще проще будет формировать csv-файл, да и отдавать его клиенту ... тоже вариант но опять же его нужно буддет сериализовать скорее всего кстати вот какое исключение на больших объемах данных выбивает: Конец потока обнаружен до завершения разбора - то есть я так понял - пришло пакетов несколько а принят только один? вот он и недополучил данные...? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 19:36
|
|||
---|---|---|---|
C# DataSet |
|||
#18+
csv файл не очень изящное решение, годится только для поделки. Покажи, как читаешь NetworkStream на сервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 19:47
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
skolecsv файл не очень изящное решение, годится только для поделки. Покажи, как читаешь NetworkStream на сервере. я на сервере его не читаю - я с сервака клиенту пытаюсь передать DataSet ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 19:49
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
Galadriel75skolecsv файл не очень изящное решение, годится только для поделки. Покажи, как читаешь NetworkStream на сервере. я на сервере его не читаю - я с сервака клиенту пытаюсь передать DataSet а читаю то что пришло вот как Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 19:51
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
Galadriel75Galadriel75пропущено... я на сервере его не читаю - я с сервака клиенту пытаюсь передать DataSet а читаю то что пришло вот как Код: c# 1. 2. 3. 4.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
выше была десериализация а тут - чтение и всегда size дает 8192 - чую - что здесь как то неправильно читаются данные из потока ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 19:54
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
Galadriel75Galadriel75пропущено... а читаю то что пришло вот как Код: c# 1. 2. 3. 4.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
выше была десериализация а тут - чтение и всегда size дает 8192 - чую - что здесь как то неправильно читаются данные из потока вот теперь я собственно начал читать по теме ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 19:57
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
и вижу, что я написал откровеннейшую фигню в этом методе! - уже начал читать матчасть и вроде начал осознавать сотворенный мною бред... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 19:59
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
с момента начала чтения матчасти уже вдруг решил кучку проблем... проверил догоадку - увеличил размер буфера ручками - данные пришли целиком... ошибка не появилась... копаю дальше ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 20:04
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
собственно, как узнать скока пришло байт ( NetworkStream) lenght - уже not supported... неохота заморачиваться с динамическими массивами и прочей лабудой ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 20:05
|
|||
---|---|---|---|
C# DataSet |
|||
#18+
Вообще большие стримы надо читать в лупе, посмотри MSDN, там был пример для NetworkStream. Засвети DeserializeData(ReceivedBytes); что там делаешь, покажи ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.05.2013, 20:11
|
|||
---|---|---|---|
|
|||
C# DataSet |
|||
#18+
skoleВообще большие стримы надо читать в лупе, посмотри MSDN, там был пример для NetworkStream. Засвети DeserializeData(ReceivedBytes); что там делаешь, покажи Код: c# 1. 2. 3. 4.
туда передается массив а есть ли способ на лету увеличивать размер массива, не юзая List<> или ArrayList? если есть, то я знаю как прочитать из буфера ровно стока, скока прислали ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=20&tablet=1&tid=1404608]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
135ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 293ms |
total: | 529ms |
0 / 0 |