Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: Разделить винсок данные Добавлено: 16.02.09 11:24  

Автор вопроса:  AWР | Web-сайт: bomber.h17.ru | ICQ: 345685652 
Написал код для кнопки на форме в две строки. Первая:winsock.senddata(data1) вторая:winsock.senddata(data2). Проблема в том что при получении присланных данных они обрабатываются как одна строка а мне нужно как будто винсок прислал дважды разные данные а не одним разом в одну строку. Помогите

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #1 Добавлено: 16.02.09 11:34
У тебя Winsock под .NET?.. :)

И что значит прислал дважды, или трижды, кто тебе их присылает, и почему бы не юзать TcpClient?..

Ответить

Номер ответа: 2
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #2 Добавлено: 16.02.09 12:04
Можно решить задачу разными способами.
Начиная от того, что перед передачей данных, отправлять длинну сообщения, заканчивая использованием WCF

Ответить

Номер ответа: 3
Автор ответа:
 AWР



ICQ: 345685652 

Вопросов: 38
Ответов: 106
 Web-сайт: bomber.h17.ru
 Профиль | | #3
Добавлено: 16.02.09 12:30
Что такое wcf? И тот способ что ты написал неприемлем так как дата1 и дата2 содержат данные разного типа. Дата1 это строка дата2 это битмап

Ответить

Номер ответа: 4
Автор ответа:
 AWР



ICQ: 345685652 

Вопросов: 38
Ответов: 106
 Web-сайт: bomber.h17.ru
 Профиль | | #4
Добавлено: 16.02.09 12:31
Я имею ввиду они в принципе не смогут быть в одном сообщений

Ответить

Номер ответа: 5
Автор ответа:
 AWР



ICQ: 345685652 

Вопросов: 38
Ответов: 106
 Web-сайт: bomber.h17.ru
 Профиль | | #5
Добавлено: 16.02.09 12:33
Agentfire научи использовать tcpClient кратко если не жалко

Ответить

Номер ответа: 6
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #6 Добавлено: 16.02.09 12:59
Что такое wcf?

Windows Communication Foundation - платформа для коммуникаций. Очень много интересной информации можно найти, набрав в адресной строке адрес "live.com" и введя в поле поиска интересующий тебя запрос.

И тот способ что ты написал неприемлем так как дата1 и дата2 содержат данные разного типа. Дата1 это строка дата2 это битмап

А чем строка принципиально отличается от битмапа?

Ответить

Номер ответа: 7
Автор ответа:
 Sneaks



Вопросов: 9
Ответов: 84
 Профиль | | #7 Добавлено: 16.02.09 14:49
пользуй разделительный знак сообщений, при получении разбивай по этому знаку на отдельный сообщение и обрабатывай, это первый и правильный вариант. Второй, не знаю как в нете, но в 6.0 делай дуэвент, в это время он отошлет сообщение и следующие будет идти отдельно. Но первый вариант правильный!

Ответить

Номер ответа: 8
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #8 Добавлено: 16.02.09 21:31
А с чего ты взял что первый вариант правильный?
Если в передаваемом сообщении и так будет знак, которым ты собираешься эти сообщения разбивать на части? Тогда все это сработает неверно.

По второй вариант даже говорить бесполезно, он вообще не будет работать.

Ответить

Номер ответа: 9
Автор ответа:
 Sneaks



Вопросов: 9
Ответов: 84
 Профиль | | #9 Добавлено: 17.02.09 09:15
ну во первых можно пользоваться vbCrLf, а во вторых ты потести а потом скажеш. ПС: вб 6.0 на нете, я хз.

Ответить

Номер ответа: 10
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #10 Добавлено: 17.02.09 10:42
О, Слава Сникс) привет ^^

vbCrLf нерационально, т.к. кушает 2 символа) А можно юзать один, например, &H0
А затем слать и слать данные. Как только кусок данных, который, по твоему, должен быть отделен от следующего, заполнил собой буфер (или уже улетел в зависимости от скорости), то посылаешь &H0, как разделитель. И т.д. В каждом блоке первым байтом можно указывать тип данных, можно без длины. Если длина все же большая и нужно индикатором на приеме отображать процесс, то еще 4 байтами посылай размер, а затем данные :)

Ответить

Номер ответа: 11
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #11 Добавлено: 17.02.09 14:53
Sneaks пишет:
ну во первых можно пользоваться vbCrLf, а во вторых ты потести а потом скажеш. ПС: вб 6.0 на нете, я хз.

Ты исходишь из предположения, что в передаваемом сообщении не будет встречаться последовательность vbCrLf. А это может быть не так.

AgentFire, и &h0 тоже может встречаться :)

Почему-то все начали заниматься изобретением нерабочих велосипедов :)

Ответить

Номер ответа: 12
Автор ответа:
 AWР



ICQ: 345685652 

Вопросов: 38
Ответов: 106
 Web-сайт: bomber.h17.ru
 Профиль | | #12
Добавлено: 18.02.09 16:23
Вы непоняли что не так. Короче код
Dim dataget as string
ws.getdata(dataget)

Как dataget может принять и строку и битмап тип стразу

Ответить

Номер ответа: 13
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #13 Добавлено: 18.02.09 17:28
[quote='Brand']AgentFire, и &h0 тоже может встречаться :)Это зависит от того, какие данные тебе нужно пересылать. Если это байтовый массив какого-либо файла, то да. А если какой-нибудь чат, то почему бы и нет?

Вы непоняли что не так. Короче код
Это ты кое-что не так понял. Поток может передавать байты, только байты, и ничего кроме байтов. И строка и битмап - это все байты. А так как ты взялся пересылать что-то по потоку, то изволь вручную передавать своему клиенту тип льющихся байтов :rolleyes:

Ответить

Номер ответа: 14
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #14 Добавлено: 18.02.09 21:31
ws - это экземпляр какого класса?

В строку можно загнать любые данные, и те которые изначально были строкой, и те которые изначально строкой не были.

Тебе по сути на вопрос уже ответили - нужно каким-то образом разделить несколько сообщений.

Как это сделать? Вопрос сложный, и решить его можно разными способами. Начиная от предложенного мною варианта перед отправкой сообщения отправлять его длину. Заканчивая использованием специализированных протоколов типа тех которые реализует WCF. Что именно выбрать - решать тебе.

Ответить

Номер ответа: 15
Автор ответа:
 AWР



ICQ: 345685652 

Вопросов: 38
Ответов: 106
 Web-сайт: bomber.h17.ru
 Профиль | | #15
Добавлено: 19.02.09 21:30
Да я знаю как разделить. это легко. Глюкает когда я DataGet'у присваиваю сразу строку и битмап

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам