снова Winsock eror 40006

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Invader
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 18.01.2005 (Вт) 4:22
Откуда: Молдавия, Виноград

снова Winsock eror 40006

Сообщение Invader » 28.01.2013 (Пн) 3:16

Из самого простого примера код работает (клиент и передает и принимает данные) на одном компьютере предположим с именем Комп-1,
но вот протестировать на виртуальной PC Windows XP c установленными сервером и mswinsck.ocx выдает ошибку
на форме клиента: 2 тексбокса и две кнопки, протокол TCP.
Код:
Код: Выделить всё
Option Explicit

Private Sub Command1_Click()
tcpClient.SendData txtSend.Text
End Sub

Private Sub Form_Load()

tcpClient.RemoteHost = "Комп-1" 'или второй VirtualXP-37358
tcpClient.RemotePort = 1001

End Sub



Private Sub cmdConnect_Click()

tcpClient.Connect

End Sub



Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)

Dim strData As String

tcpClient.GetData strData

txtOutput.Text = strData

End Sub

при нажатии кнопки 1 отправки серверу строки выскакивает ошибка 40006-«Недопустимое состояние подключения или протокол для запрошенной операции или запрос».
умён и жаден,
характер отсуствует

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: снова Winsock eror 40006

Сообщение FireFenix » 28.01.2013 (Пн) 8:27

Поиск совсем не используем? совсем совсем?
Изображение

msdn -> http://support.microsoft.com/kb/183987/ru
vbstreets -> viewtopic.php?f=9&t=7373
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Invader
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 18.01.2005 (Вт) 4:22
Откуда: Молдавия, Виноград

Re: снова Winsock eror 40006

Сообщение Invader » 28.01.2013 (Пн) 11:31

со всем уважением к Вашему уставшему состоянию, вызванном как я понимаю, глупыми вопросами по форуму, моим не желанием искать - как Вы думаете!
я просматривал процедуру отсчета времени и абсолютно не понимаю где в моём случае мне использовать её в моём примере т.к.
если это вставляется перед строчкой отправки сообщения тогда
Код: Выделить всё
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim strt As Long
strt = GetTickCount
Do Until tcpClient.State = 7
    DoEvents
    If GetTickCount > strt + 1500 Then
        tcpClient.Close
        MsgBox "Can't connect", vbCritical
        Exit Sub
    End If
Loop
tcpClient.SendData txtSend.Text
End Sub

Private Sub Form_Load()

tcpClient.RemoteHost = "Комп-1" 'или второй VirtualXP-37358
tcpClient.RemotePort = 1001

End Sub



Private Sub cmdConnect_Click()

tcpClient.Connect

End Sub



Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)

Dim strData As String

tcpClient.GetData strData

txtOutput.Text = strData

End Sub

мне не понятна эта процедура которая по превышению лимита, выходит из суб, тем самым я так и не понимаю, почему к виртуальной машине я не получаю подключение. и теперь и на одном компьютере я получаю сообщение Can't connect, она по всей видимости должна выполнятся как проверка после tcpClient.RemoteHost = "Комп-1" 'или второй VirtualXP-37358
tcpClient.RemotePort = 1001
всё же на моем примере можно по подробнее, код небольшой.
или он не верно составлен?
умён и жаден,
характер отсуствует

Invader
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 18.01.2005 (Вт) 4:22
Откуда: Молдавия, Виноград

Re: снова Winsock eror 40006

Сообщение Invader » 28.01.2013 (Пн) 13:47

тема закрыта, решено с применением классов на vb.net, придется на клиентской машине ставить фраемворк
умён и жаден,
характер отсуствует

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 28.01.2013 (Пн) 17:15

:lol: :lol: :lol: :lol: :lol: :lol: :lol:

PS: Не удержался :D

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: снова Winsock eror 40006

Сообщение FireFenix » 28.01.2013 (Пн) 20:29

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

Более того, раз используется VM (виртуальная машина), то вначале нужно было пропинговать, виден ли этот компьютер в сети. Проверить, соответствует ли имя этого компьютера заданному IP. И уж потом сторонними средствами проверить, проходит лю подключение к этой машине.

Так же, конектится по Имени хоста, не кошерно и правильнее было бы по IP.

Invader писал(а):я просматривал процедуру отсчета времени и абсолютно не понимаю где в моём случае мне использовать её в моём примере

Очевидно это лежит в корне того, что описанно мануалом msdn. Если ты его хоть раз прочитал, то почему не вник суть?
При вызове метода SendData элемента управления WinSock до подключения сокета

Т.е. происходит отправка данных, к ещё не подключенному интерфейсу. Как известно интерфейс может быть не подключен по ряду причин:
* Не хватило времени на инициализацию и соединение
* Удалёный хост:порт не доступен
* Другие, не самые очевидные...
А если проявить воображение и способности к мышлению, то панацея через задержку по времени и проверки статуса даёт Timeout подключения, тем самым даёт время на инициализацию.

Но причин может быть миллион. Поэтому - рассказ начался с того, что нужно было проверить, а потом всю ситуацию в целом рассписать в вопросе с тем, что было проверено - для полноты помощи и экономии сил на телепатии...

Invader писал(а):тема закрыта, решено с применением классов на vb.net, придется на клиентской машине ставить фраемворк

Изображение
Epic Win Fail

Invader писал(а):решено с применением классов на vb.net

Qwertiy писал(а):PS: Не удержался :D

Хакер нас забанит, за то что внедряем свою тёмную религию в светлые умы... Не в той ветке форума Изображение
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 28.01.2013 (Пн) 21:33

FireFenix писал(а):
Qwertiy писал(а):PS: Не удержался :D

Хакер нас забанит, за то что внедряем свою тёмную религию в светлые умы... Не в той ветке форума Изображение

Не, тут я как раз наоборот имел в виду :) Полениться немного подумать и вместо этого переписать на .NET :shock:


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

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

Сейчас этот форум просматривают: Majestic-12 [Bot], SemrushBot и гости: 9

    TopList