Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Несколько вопросов по WinSock Добавлено: 06.05.08 13:06  

Автор вопроса:  PeterS
Для инициализации Winsock 'а версии 1.0 WS_VERSION_REQD должна быть равна &H100 и для 2.0 - &H200. Но почему при этих значениях функция WSAStartup возвращает ошибку?

Второе, в MSDN 'е сказано, что переменная szDescription должна быть длиной до 256 символов, а в примере от MS:

...
Private Const WSADescription_Len = 256
...
szDescription(0 To WSADescription_Len) As Byte
...



Получается szDescription длиной 257 символов. На один больше так?

Ответить

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

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



Администратор

ICQ: 201502381 

Вопросов: 15
Ответов: 737
 Профиль | | #1 Добавлено: 06.05.08 14:12
Второе, вероятно, обусловлено тем, что в С используются ASCIIZ-строки, для которых нужно отдельно выделять байт под \0.

Ответить

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



Вопросов: 24
Ответов: 109
 Профиль | | #2 Добавлено: 06.05.08 14:16
А у нас VB, тогда нужен ли нам этот отдельный байт?

Ответить

Номер ответа: 3
Автор ответа:
 shuffle



Администратор

ICQ: 201502381 

Вопросов: 15
Ответов: 737
 Профиль | | #3 Добавлено: 06.05.08 14:18
WinAPI написал на С.

Ответить

Номер ответа: 4
Автор ответа:
 PeterS



Вопросов: 24
Ответов: 109
 Профиль | | #4 Добавлено: 06.05.08 14:22
Ясно, спасибо, значит нужен.
А что с первым пунктом, кто-нибудь знает?

Ответить

Номер ответа: 5
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #5
Добавлено: 06.05.08 14:36
Посмотри WSAGetLastError

Ответить

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



Вопросов: 24
Ответов: 109
 Профиль | | #6 Добавлено: 06.05.08 18:45
WSAGetLastError возвращает 126, а WSAStartup - 10092. Что означает 10092 я нашёл, а про 126 ничего.

Ответить

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



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #7
Добавлено: 06.05.08 19:03
ERROR_MOD_NOT_FOUND=126 - The specified module could not be found.

Ответить

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



Вопросов: 24
Ответов: 109
 Профиль | | #8 Добавлено: 06.05.08 20:02
Что это даёт? Интересно, что за модуль не найден?

Ответить

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



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #9
Добавлено: 06.05.08 21:46
Судя по
http://forum.sources.ru/index.php?showtopic=223339&hl=

видимо WSAStartup не загружает Winsock, и юзать WSA функции низя (WSAGetLastError тоже).

Ответить

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



Вопросов: 24
Ответов: 109
 Профиль | | #10 Добавлено: 07.05.08 18:50
Т.к. использовать функцию WSAGetLastError нельзя, то возвращаемся к ошибке 10092 WSAStartup.

В общем вот код, может кто у себя проверит:
' Инициализация WinSock'а
Public Declare Function WSAStartup Lib "ws2_32" (ByVal wVersionRequired As _
  Long, lpWSADATA As WSAData) As Long
' Освобождение WinSock'а
Public Declare Function WSACleanup Lib "ws2_32" () As Long
' Создание сокета
Public Declare Function socket Lib "ws2_32" (ByVal af As Long, ByVal s_type As _
  Long, ByVal protocol As Long) As Long

Private Const MAX_WSADescription = 256
Private Const MAX_WSASYSStatus = 128

' Так работает
'Public Const WS_VERSION_REQD As Long = &H202 ' версия 2.2
' А так нет
[b]Public Const WS_VERSION_REQD As Long = &H200 ' версия 2.0[/b]

' для ф-и socket
Public Const PF_INET = 2
Public Const SOCK_STREAM = 1
Public Const IPPROTO_TCP = 6

Public Type WSAData
  wVersion As Integer
  wHighVersion As Integer
  szDescription(0 To MAX_WSADescription) As Byte
  szSystemStatus(0 To MAX_WSASYSStatus) As Byte
  wMaxSockets As Integer
  wMaxUDPDG As Integer
  dwVendorInfo As Long
End Type

Function Init_sock() As Byte
    Dim result As Long, WSAD As WSAData
  result = WSAStartup(WS_VERSION_REQD, WSAD)
  MsgBox result
End Function

Private Sub Form_Load()
  Call Init_sock
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Call WSACleanup
End Sub

Ответить

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



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #11
Добавлено: 07.05.08 19:58
Правда это ошибка DM, но видимо то что надо.
http://westbyte.com/dm/index.phtml?page=faq_ec_ru
"10092 - Указанная версия Windows Sockets не поддерживается."
Непременно нужна версия 2.0?

Ответить

Номер ответа: 12
Автор ответа:
 PeterS



Вопросов: 24
Ответов: 109
 Профиль | | #12 Добавлено: 07.05.08 22:55
Да, нужны версии 1.0 и 2.0.

Ответить

Страница: 1 |

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



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