winsock контрол и проблемы

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

winsock контрол и проблемы

Сообщение Sun07 » 08.07.2006 (Сб) 21:04

Помогите, пожалуйста, уже не знаю что и думать. Тестировал программу в Windows 98SE при установленном VB. В программе использую контрол Winsock. Работаю по UDP протоколу, RemoteHost, RemotePort у клиента установлены. Клиент на одном компе, сервер на другом. Локальная сеть.Запускаю клиента в дизайнере VB, отправляю данные. Сервер их принимает. Всё хорошо. Компилирую клиента в exe, запускаю exe, пытаюсь отправить данные - Run-time error 126! Клиент завершается. Сервер принимает данные успешно. Теперь запускаю клиента в дизайнере - та же ошибка при senddata сокета. Завершаю программу. Запускаю тут же ещё раз - работает без ошибок.
Тоже самое при отправке данных от сервера - из exe постоянно ошибка, из дизайнера - работает при втором и последующих запусках!

Второй вопрос - есть параметр RemoteHostIP - он нужен только серверу для определения IP клиента (устанавливается после приёма от клиента данных). При отправке сервером данных нужно преобразовывать RemoteHostIP в RemoteHost или как?

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 09.07.2006 (Вс) 0:19

1) Для клиент-серверного соединения использование UDP противопоказано.

2 ) Код в студию, поскольку телепат на форуме только 1, но он сейчас напряг свои способности, для понимания, почему в php в callback'е буфера вывода не работают файловые операции.
Изображение

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 09.07.2006 (Вс) 15:08

'Сервер

Private Sub txtSend_Change()
Dim a As String
' Пересылать текст, как только он будет набран в текстовом поле.
MsgBox WinsockUDP.RemoteHost
MsgBox WinsockUDP.RemotePort
'хотя здесь RemoteHost="" после приёма данных от клиента, клиент получает данные от сервера! (?)
WinsockUDP.SendData txtSend.Text
End Sub

Private Sub Form_Load()

' Имя Winsock элемента WinsockUDP
With WinsockUDP
.LocalPort = 1000
.Bind ' Привязка к локальному порту.
End With

End Sub

Private Sub Winsockudp_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
'MsgBox bytesTotal
'MsgBox udpPeerA.BytesReceived
WinsockUDP.GetData strData
txtOutput.Text = strData

End Sub

Private Sub WinsockUDP_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
MsgBox "Ошибка сокета сервера!"
End Sub



'Клиент
Private Sub txtSend_Change()

If txtSend.Text = "" Then GoTo 10
' Пересылать текст, как только он будет набран в текстовом поле.
'MsgBox WinsockSend.RemoteHost
'MsgBox WinsockSend.RemotePort
WinsockSend.SendData txtSend.Text
10
End Sub

Private Sub Form_Load()

txtSend.Text = ""
txtOutput.Text = ""

With WinsockSend
' Важно: правильно укажите значение RemoteHost компьютера-СЕРВЕРА, с которым предстоит соединение.
.RemoteHost = "192.168.200.175"
.RemotePort = 1000 ' номер порта для соединения компьютера-СЕРВЕРА
'если LocalPort=0 клиент привязывается к свободному порту
.Bind ' Привязка к локальному порту.
End With

End Sub

Private Sub WinsockSend_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
'MsgBox bytesTotal
'MsgBox udpPeerA.BytesReceived
WinsockSend.GetData strData
txtOutput.Text = strData

End Sub

Private Sub WinsockSend_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
MsgBox "Ошибка сокета клиента!"
End Sub

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 09.07.2006 (Вс) 15:12

UDP протокол здесь ни при чём, он делает своё дело.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 09.07.2006 (Вс) 17:20

поиск в Google по "senddata error 126" на русском нет ничего, а на иностранном полно - итальянский, ещё какие-то языки. Что-то более менее есть по этим ссылкам


http://www.google.ru/group/comp.lang.ba ... esult&cd=1

http://www.google.ru/group/comp.lang.ba ... esult&cd=2

http://www.google.ru/group/microsoft.pu ... esult&cd=3

но ничего я там не понял - на англицком усё. Понял только, что проблема возникает в Windows 98 SE.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 10.07.2006 (Пн) 3:45

Люди! Долго я буду сам с собой разговаривать? :-)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.07.2006 (Пн) 4:16

Мои телепатические способности сейчас целиком ушли на то о чём говорил keks-n. Так что я пока подзяряжаюсь :lol:

Советую проверить на других осях, на других портах, и на одном компе.

Советую расставить Handler-ы на ошибку и выяснить где она происходит.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 10.07.2006 (Пн) 16:10

ошибка при senddata сокета. На других осях работает (в WinXP). Кто-нить может перевести, о чём говорится по ссылкам, что я указывал ранее?

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 10.07.2006 (Пн) 16:17

Sun07 писал(а):Кто-нить может перевести, о чём говорится по ссылкам
Лингво может.
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 11.07.2006 (Вт) 15:02

Спасибо, добрые люди! Оставили меня наедине с каким-то лингво.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 11.07.2006 (Вт) 15:04

Да незачто, если что обращайся (c) ANDLL
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 12.07.2006 (Ср) 0:22

продолжаем наш разговор. Run-time error '126': "The specified module could not be found." Какие dll использует контрол Winsock? И какую версию винсока?

XPAHuTEJIb
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 12.07.2006 (Ср) 15:04
Откуда: Новый Уренгой

Сообщение XPAHuTEJIb » 12.07.2006 (Ср) 15:09

а не проще действительно использовать tcp протокол

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 12.07.2006 (Ср) 15:12

Не принципиально. А надо попробоват накатить 6-ой сервис пак-может помочь.
Изображение

XPAHuTEJIb
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 12.07.2006 (Ср) 15:04
Откуда: Новый Уренгой

Сообщение XPAHuTEJIb » 12.07.2006 (Ср) 15:56

что значит: "не принципиально", постоянно пишу клиен-серверные приложения и не было таких глюков. Возможно, скорее всего берешь порты в районе 1000, которые используют все приложения....из-за этого и глюк, порт уже занят.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 12.07.2006 (Ср) 16:00

XPAHuTEJIb
Я писал(а):1) Для клиент-серверного соединения использование UDP противопоказано.

В ответ Sun07 писал(а):UDP протокол здесь ни при чём, он делает своё дело.
Изображение

XPAHuTEJIb
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 12.07.2006 (Ср) 15:04
Откуда: Новый Уренгой

Сообщение XPAHuTEJIb » 12.07.2006 (Ср) 16:05

КАК СКАЖИТЕ...
по второму вопросу:
Remotehostip определяется при подключении к winsockу клиента, его не надо преобразовывать. А вот remotehostname обычно не определяется.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 12.07.2006 (Ср) 16:07

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

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

Сообщение tyomitch » 12.07.2006 (Ср) 16:08

RemoteHost (без Name) никогда не определяется. Что туда записали, то там и будет.
Изображение

XPAHuTEJIb
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 12.07.2006 (Ср) 15:04
Откуда: Новый Уренгой

Сообщение XPAHuTEJIb » 12.07.2006 (Ср) 16:17

не путай, remotehost при вызове соединения и определения ипа удалённого компа.
remotehost используется чисто для соединения, формат типа:
1. winsock.connect remotehost, remoteport
2. winsock.remotehost 127.0.0.1
winsock.remoteport 6667
winsock.connect
можешь задать конкретный порт с какого пойдёт соединение: winsock.localport 1234, а потом уже делать connect

а для определения ip используется к примеру:

Private Sub ws1_ConnectionRequest(ByVal requestID As Long)
ws2.Accept requestID
label1 = ws2.RemoteHostIP
End Sub

при этом: remoteport будет равен исходящему порту т.е. 1234, а remotehostname если не определится - выдаст ip адрес
Последний раз редактировалось XPAHuTEJIb 12.07.2006 (Ср) 16:20, всего редактировалось 1 раз.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 12.07.2006 (Ср) 16:18

А рукакми как?
Изображение

XPAHuTEJIb
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 12.07.2006 (Ср) 15:04
Откуда: Новый Уренгой

Сообщение XPAHuTEJIb » 12.07.2006 (Ср) 16:21

что руками как?

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

Сообщение tyomitch » 12.07.2006 (Ср) 16:21

Свойства remotehostname нет в природе.
Изображение

XPAHuTEJIb
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 12.07.2006 (Ср) 15:04
Откуда: Новый Уренгой

Сообщение XPAHuTEJIb » 12.07.2006 (Ср) 16:25

тьфу точно....:)))

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 12.07.2006 (Ср) 16:32

tyomitch
Получить имя удалённой машины... Но вообще это немного не в тему.
Изображение

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

Сообщение tyomitch » 12.07.2006 (Ср) 16:42

совсем даже не я, а XPAHuTEJIb, писал(а):что руками как?


gethostbyaddr
пример см. в daemon_saver, поиск сверху.
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 12.07.2006 (Ср) 17:17

Спасибо.
Изображение

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 12.07.2006 (Ср) 21:49

XPAHuTEJIb писал(а):что значит: "не принципиально", постоянно пишу клиен-серверные приложения и не было таких глюков. Возможно, скорее всего берешь порты в районе 1000, которые используют все приложения....из-за этого и глюк, порт уже занят.

1. Нет, порты я использую >1024. И на винде никаких особых приложений не крутится. Эта же проблема возникает из-за отсутствия какого-то модуля. Я же написал описание ошибки. Да и на иностранных форумах она часто светится. И на XP работает, а на 98-й -не хочет.
2. Я понимаю, что все за TCP. Но я выбрал UDP - так уж мне надо. Я знаю, что доставку пакета он не гарантирует, надеюсь, хоть целостность пакета он гарантирует. Если пакет пришёл битый, то он вроде отбрасывается (типа не дошёл). Вот тут мне проясните, плиз, гарантирует ли он целостность пакета (т.е., если пакет пришёл, надо проверять целостность данных?).

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

Сообщение tyomitch » 12.07.2006 (Ср) 22:03

Если пакет пришёл, значит он целый. Битые выбрасываются сами.
Изображение

XPAHuTEJIb
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 12.07.2006 (Ср) 15:04
Откуда: Новый Уренгой

Сообщение XPAHuTEJIb » 13.07.2006 (Чт) 11:35

Ну ты можешь целостность проверить длиной сообщения.
Можно дописать в начало пакета тот же HostName и длину или сумму символов, а при получении сравнивать.

След.

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 92

    TopList