TCPClient теряет данные

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

TCPClient теряет данные

Сообщение ASD » 25.11.2008 (Вт) 15:18

Привет всем.
Проблема следующего характера.
Пишу библиотеку для работы с XIMMS протоколом.
Использую TCPClient класс для соединения.
Делаю асинхроное чтение так:
Код: Выделить всё
    Private in_buff(1024 * 500) As Byte
    Private _AsyncStream As IAsyncResult
    Private wtcp As New Net.Sockets.TcpClient
    Private wstream As NetworkStream
_AsyncStream = wstream.BeginRead(in_buff, 0, in_buff.Length, New AsyncCallback(AddressOf OnRecesive), in_buff)

Public Sub DataSend(ByVal raw_data As String)
        If wtcp.Connected = True Then
            Dim out_buff As Byte() = Encoding.UTF8.GetBytes(raw_data)

            wstream.Write(out_buff, 0, out_buff.Length)
end sub

    Private Sub OnRecesive(ByVal ar As IAsyncResult)

SyncLock wstream
            Dim total As Integer
            If ar.IsCompleted Then


                total = wstream.EndRead(ar)
                Dim _tm_in_buff As Byte() = ar.AsyncState
debug.print (Encoding.UTF8.GetString(_tm_in_buff))
                _AsyncStream = wstream.BeginRead(in_buff, 0, in_buff.Length, New AsyncCallback(AddressOf OnRecesive), in_buff)

End Synlock
End Sub


Но у меня теряются данные! Если приходят сообщения с сервера небольшие то все ОК а если большие (больше буфера к примеру) то банально пропадает часть данных причем центральная.
Пример:
os.ru</field><field name="objectclass">CommuniGateAccount</field><field name="sn">Office</field><field name="telephoneNumber">7447-44402</field><field name="uid">7370402</field></directoryData>


Причем что я не пробовал, первая аля строка приходит нормально, далее даных нет и потом вываливается вот это.
В чем проблема?
Moderator VBStreets
---------------------------

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Re: TCPClient теряет данные

Сообщение ASD » 27.11.2008 (Чт) 18:45

Все разобрался.
Проблема была в том что данные поступали не полностью и Encoding.UTF8.... обламывался.
Moderator VBStreets
---------------------------

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: TCPClient теряет данные

Сообщение Williams » 27.11.2008 (Чт) 19:07

В догонку:
Думаю что свойство ReceiveBufferSize будет тебе полезным.
И вы думаете, что вас оставят в живых после прочтения этого поста?


Вернуться в Visual Basic .NET

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

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

    TopList  
cron