+ Reply to Thread
Results 1 to 3 of 3

Thread: Server counts LF but delivers CrLf?

  1. #1
    Robert_Zenz's Avatar
    Robert_Zenz is offline VB.NET Forum Idol Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET
    .NET Framework
    .NET 2.0
    Join Date
    Jun 2008
    Location
    Vienna, Austria
    Age
    23
    Posts
    503
    Reputation
    296

    Default Server counts LF but delivers CrLf?

    Hello everyone again.

    I was writing my own POP3 client but ran into some problems along the way. I could hunt down one of them by now, which seems to be the key to most of the problems I experienced.

    I'm using a TCPClient to connect to the server and a NetworkStream to read and write data. This is working great, except one thing: The LIST command delivers me the size of the mail in bytes...but with Lf counted, though, if I start to download the mail with the RETR command, I receive CrLf?!

    I'm using the simple NetworkStream.Read(bytes(), offset, length) Method to read from the network. This method already delivers CrLf...but the server counts Lf and so the size I received is totally messed up.

    Code:
    'toReceive is an Int32 from the LIST command
    'Me.prv_client is the TCPClient
    'Me.prv_strm is the NetworkStream from the client
    
                Dim buffer(Me.prv_client.ReceiveBufferSize - 1) As Byte
                Dim readAll As Integer = 0
                Dim read As Integer = Int32.MaxValue
    
                Do
                    Array.Clear(buffer, 0, buffer.Length)
                    read = 0
    
                    Try
                        read = Me.prv_strm.Read(buffer, 0, buffer.Length)
                    Catch ex As IOException
                        Me.writeError(ex.Message)
                    End Try
    
                    readAll += read
    
                    res.Append(Me.prv_encoding.GetString(buffer, 0, read))
                Loop While readAll < toReceive
    Of course, I'd count the Lf along the way and add them to toReceive (which I do right now, working), but that can't be the solution.

    Anybody has ever seen something like this?

    Thanks in advance,
    Bobby
    Don't give TypeCasting Errors a chance, turn ON Option Strict!
    Greatest Obfuscator ever: EazFuscator (Freeware)
    Greatest Reflection Tool ever: .NET Reflector (Freeware) with Add-Ins
    Greatest Introspection Tool ever: Gendarme (GPL)
    Greatest MySQL FrontEnd ever: MySQL-Front (Shareware), HeidiSQL (GPL)

  2. #2
    JohnH's Avatar
    JohnH is offline VB.NET Forum Moderator JohnH has a reputation beyond repute JohnH has a reputation beyond repute JohnH has a reputation beyond repute JohnH has a reputation beyond repute JohnH has a reputation beyond repute JohnH has a reputation beyond repute JohnH has a reputation beyond repute JohnH has a reputation beyond repute JohnH has a reputation beyond repute JohnH has a reputation beyond repute JohnH has a reputation beyond repute
    .NET Framework
    .NET 4.0
    Join Date
    Dec 2005
    Location
    Norway
    Age
    37
    Posts
    11,043
    Reputation
    1563

    Default

    Why not use a StreamReader and StreamWriter with the NetworkStream? You are reading and sending crlf terminated lines of strings all the way with this protocol, ie ReadLine/WriteLine. Multiline responses simply end with a "." line.

  3. #3
    Robert_Zenz's Avatar
    Robert_Zenz is offline VB.NET Forum Idol Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET Robert_Zenz master of VB.NET
    .NET Framework
    .NET 2.0
    Join Date
    Jun 2008
    Location
    Vienna, Austria
    Age
    23
    Posts
    503
    Reputation
    296

    Default

    Mmmhhh...you're right. I was afraid that there might be false positive with this simple char sequence (CrLf.CrLf), but they must be the last thing I read.

    Thanks for your suggestion, I tried it and it's working (of course).

    Thank you,
    Bobby
    Don't give TypeCasting Errors a chance, turn ON Option Strict!
    Greatest Obfuscator ever: EazFuscator (Freeware)
    Greatest Reflection Tool ever: .NET Reflector (Freeware) with Add-Ins
    Greatest Introspection Tool ever: Gendarme (GPL)
    Greatest MySQL FrontEnd ever: MySQL-Front (Shareware), HeidiSQL (GPL)

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

     

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts