Проблема с Winsock (передаёт две переменные как одну :-( )

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Проблема с Winsock (передаёт две переменные как одну :-( )

Сообщение XairOn » 25.09.2004 (Сб) 6:40

Здравствуйте. У меня такая проблема возникла: когда я передаю две строковых переменные от клиента к серверу, то почему-то они туда доходят как одна, например:
text1.text="Visual "
text2.text="Basic"
winsock.SendData text1.text
winsock.SendData text2.text

Вроде всё правильно, но сервер принимает две переменные как одну и получится, что text1.text="Visual Basic", а text2.text="". Помогите пожалуйста от этого избавиться!

er_admin
Новичок
Новичок
 
Сообщения: 35
Зарегистрирован: 04.06.2004 (Пт) 21:25

можно так

Сообщение er_admin » 25.09.2004 (Сб) 8:37

каждую строку перед посылкой обрамлять спец.символами, а потом при приеме вычислять то, что внутри. (winsock.senddata "{"+text1.text+"}"

моя фунция для этого:
Public Function fun_SplitString(str_SplitStroka As String, str_SplitChar1 As String, str_SplitChar2 As String)
Dim mas_str_TempArray() As String
Dim str_SimvolTemp As String
Dim iter1 As Integer, iter2 As Integer, iter3 As Integer

For iter1 = 1 To Len(str_SplitStroka)
str_SimvolTemp = Mid(str_SplitStroka, iter1, 1)
If str_SimvolTemp = str_SplitChar1 Then
For iter2 = iter1 + 1 To Len(str_SplitStroka)
str_SimvolTemp = Mid(str_SplitStroka, iter2, 1)
If str_SimvolTemp = str_SplitChar2 Then
ReDim Preserve mas_str_TempArray(iter3) As String
mas_str_TempArray(iter3) = Mid(str_SplitStroka, iter1 + 1, iter2 - iter1 - 1)
iter3 = iter3 + 1
iter1 = iter2
Exit For
End If
Next iter2
End If
Next iter1
fun_SplitString = mas_str_TempArray()
Erase mas_str_TempArray()
End Function

только надо, чтобы в в отправляемых строках не было этого спец.символа, а то просплититься неправильно.

иного решения я не нашел.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 25.09.2004 (Сб) 11:49

er_admin, я бы использовал vbNullChar вместо "{" - уж он-то в текстбоксе точно встретиться не может.
Изображение

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 25.09.2004 (Сб) 11:58

Лучше Chr(1)
Моду создают модоки, а распространяют модозвоны.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 25.09.2004 (Сб) 12:22

hCORe писал(а):Лучше Chr(1)

Чем лучше? Он-то в текстбоксе может и оказаться!
Изображение

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Всё немного проще 8)

Сообщение xenomorph » 25.09.2004 (Сб) 12:29

Какие бы символы не использовались, есть вероятность что они будут в теле пакета передачи 8) и ... аут 8). Просто в начале первого пакета - необходимо указать длинну всего пакета. 8) И резать все данные по размеру и контрольной сумме 8).
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 25.09.2004 (Сб) 21:51

xenomorph спасибо большое, я вобщем-то так и поступил. Если кому-нибудь понадобиться приведу пример:
в моём случае нужно было отделить одну текстовую переменную от другой, вот как я это сделал:


For i = 1 To Len(текстовая переменная)
If Asc(Mid$(текстовая переменная, i, 1)) <> 124 Then m = Val(Mid$(текстовая переменная, 1, i)) Else Exit For
Next i
текстовая переменная1 = Mid$(текстовая переменная, i + 1, m)
текстовая переменная2 = Mid$(текстовая переменная, m + Len(Str(m)) + 1)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: С.Т. и гости: 2

    TopList