Страница: 1 | 2 |
Вопрос: Разделить винсок данные
Добавлено: 16.02.09 11:24
Автор вопроса: AWР | Web-сайт:
Написал код для кнопки на форме в две строки. Первая: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-сайт:
Профиль | | #3
Добавлено: 16.02.09 12:30
Что такое wcf? И тот способ что ты написал неприемлем так как дата1 и дата2 содержат данные разного типа. Дата1 это строка дата2 это битмап
Номер ответа: 4
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #4
Добавлено: 16.02.09 12:31
Я имею ввиду они в принципе не смогут быть в одном сообщений
Номер ответа: 5
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #5
Добавлено: 16.02.09 12:33
Agentfire научи использовать tcpClient кратко если не жалко
Номер ответа: 6
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #6
Добавлено: 16.02.09 12:59
Windows Communication Foundation - платформа для коммуникаций. Очень много интересной информации можно найти, набрав в адресной строке адрес "live.com" и введя в поле поиска интересующий тебя запрос.
А чем строка принципиально отличается от битмапа?
Номер ответа: 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
ну во первых можно пользоваться vbCrLf, а во вторых ты потести а потом скажеш. ПС: вб 6.0 на нете, я хз.
Ты исходишь из предположения, что в передаваемом сообщении не будет встречаться последовательность vbCrLf. А это может быть не так.
AgentFire, и &h0 тоже может встречаться
Почему-то все начали заниматься изобретением нерабочих велосипедов
Номер ответа: 12
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #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 тоже может встречаться Это зависит от того, какие данные тебе нужно пересылать. Если это байтовый массив какого-либо файла, то да. А если какой-нибудь чат, то почему бы и нет?
Номер ответа: 14
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #14
Добавлено: 18.02.09 21:31
ws - это экземпляр какого класса?
В строку можно загнать любые данные, и те которые изначально были строкой, и те которые изначально строкой не были.
Тебе по сути на вопрос уже ответили - нужно каким-то образом разделить несколько сообщений.
Как это сделать? Вопрос сложный, и решить его можно разными способами. Начиная от предложенного мною варианта перед отправкой сообщения отправлять его длину. Заканчивая использованием специализированных протоколов типа тех которые реализует WCF. Что именно выбрать - решать тебе.
Номер ответа: 15
Автор ответа:
AWР
ICQ: 345685652
Вопросов: 38
Ответов: 106
Web-сайт:
Профиль | | #15
Добавлено: 19.02.09 21:30
Да я знаю как разделить. это легко. Глюкает когда я DataGet'у присваиваю сразу строку и битмап