Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Нельзя увеличить размер буфера winsock api Добавлено: 03.07.10 23:38  

Автор вопроса:  anatoliy-2
При использовании функций winsock api : Send, Recv и размере буфера 2048 байт приложение работает нормально, скорость обмена данными между сокетами равна примерно 1 мегабайт. При попытке увеличения размера буфера передачи более 2048 байт приложение даёт сбои и перестаёт работать.
Функция setsockopt также не оказывает влияния на размер буфера.
Что мешает увеличить размер буфера передачи, пожалуйста помогите решить данную проблему ?!
Анатолий 03.07.2010 Visual Basic 6 (SP6)

Ответить

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

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



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #1
Добавлено: 04.07.10 13:03
в чём глючит? что делаем? Код?

Ответить

Номер ответа: 2
Автор ответа:
 anatoliy-2



Вопросов: 12
Ответов: 14
 Профиль | | #2 Добавлено: 04.07.10 16:34
Код на передачу:
Public Function sSend(ByVal s&, ByVal vMessage) As Long
  ;Dim TheMsg() As Byte, sTemp$
  TheMsg = ""
  Select Case VarType(vMessage)
    Case 8209 'byte array
      sTemp = vMessage
    Case 8 'string, if we recieve a string, its assumed we are linemode
      sTemp = StrConv(vMessage, vbFromUnicode)
    Case Else
      sTemp = CStr(vMessage)
      sTemp = StrConv(vMessage, vbFromUnicode)
  End Select
  TheMsg = sTemp
  If UBound(TheMsg) > -1 Then
    sSend = send(s, TheMsg(0), (UBound(TheMsg) - LBound(TheMsg) + 1), 0)
  End If
End Function
Где vMessage буфер данных для передачи (до 2048 байт все работает превосходно)
Код на приём данных:
Public Function sGet(ByVal Sck&;) As String
  ;Dim x As Long, ReadBuffer(1 To BufMyData1) As Byte, strCommand As String
  strCommand = ""
  ;Do
    x = recv(Sck, ReadBuffer(1), BufMyData1, 0)
    If x > 0 Then
        strCommand = strCommand + Left$(StrConv(ReadBuffer, vbUnicode), x)
    End If
    If x <> BufMyData1 Then Exit Do
  Loop
  sGet = strCommand
End Function
Где BufMyData1 размер буфера приёма данных размер которого равен или больше буфера передачи данных vMessage. До vMessage = 2048, размер буфера BufMyData1 можно определять любой, равный или больше vMessage. При vMessage = 2048 размер буфера BufMyData1 не имеет значения, приложение не работает.

Ответить

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



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #3
Добавлено: 04.07.10 16:57
для кода используй кнопку код

Ответить

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



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #4
Добавлено: 04.07.10 16:59
может дело не в проге?

Ответить

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



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #5
Добавлено: 04.07.10 19:12
приложение даёт сбои и перестаёт работать.

tcp/udp?
Сбои - это пакеты не доходят?

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

Ответить

Номер ответа: 6
Автор ответа:
 anatoliy-2



Вопросов: 12
Ответов: 14
 Профиль | | #6 Добавлено: 04.07.10 23:39
Протокол используется TCP/IP. Переполнение буфера исключено, так как сервер отправляет клиенту следующую порцию данных только по запросу клиента. Похоже что дело не в программе, а в каком то внутреннем ограничении(глюке) VB6. Как это победить не знаю...

Ответить

Страница: 1 |

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



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