Jump to content
Xtreme .Net Talk

Recommended Posts

Posted

Hi

 

For those of you that saw the other thread, i've managed to find out why it wasnt working and find a work around, but i dont know why one works and not the other. Could someone have a look and tell me what they think please?

 

This is the original code. It was largely working fine, but the first char was chr(153) or Hex value 99. It would convert this into a ?, hex value 3F or Chr(63). I'm guessing it was reading the first character from the string as a ? as its an unprintable symbol, and then outputting this to an actual ? in the conversion.

 

           mobjClient = New TcpClient("172.28.46.27", 3500)
 
           Dim b() As Byte = System.Text.Encoding.ASCII.GetBytes(sMessage)
  
           Dim s As IO.Stream = mobjClient.GetStream
           s.Write(b, 0, b.Length)
           s.Flush()
           s.Close()

 

However I tried the change below (ok so my boss did, who has never used .Net before) and almost annoyingly it worked.

 

           mobjClient = New TcpClient("172.28.46.27", 3500)
 
           Dim b(sMessage.Length - 1) As Byte
           For i As Integer = 0 To sMessage.Length - 1
               b(i) = Asc(sMessage.Substring(i, 1))
           Next

           Dim s As IO.Stream = mobjClient.GetStream
           s.Write(b, 0, b.Length)
           s.Flush()
           s.Close()

 

Can someone please tell me why the first piece of code didnt work but the second did? Why could it not convert it correctly as part of a string, but it could byte by byte.

 

Obviously its working, which i'm happy about, but i would like to know why if anyone can help please?

 

Thanks

Posted

Yes its the same piece of code, i just comment out either

Dim b() As Byte = System.Text.Encoding.ASCII.GetBytes(sMessage)

 

or

 

           Dim b(sMessage.Length - 1) As Byte
           For i As Integer = 0 To sMessage.Length - 1
               b(i) = Asc(sMessage.Substring(i, 1))
           Next

Posted

Its a string compiled below.

 

   Public sHeader As String 'Holds Message Header
   Public sNumMessage As String 'Holds No. of Messages
   Public sNumDestination As String 'Holds No. of Destinations
   Public sNumSigns As String 'Holds Sign Numbers
   Public sMessHigh As String 'Holds Message High
   Public sMessLow As String 'Holds Message Low
   Public sMessText1 As String 'Holds Message Text for line 1
   Public sMessText2 As String 'Holds message text for line 2
   Public sMessRolling As String 'Holds rolling string
   Public sMessLargeRolling As String
   Public bytChecksum As Byte 'Holds Message Checksum
   Public Shared sMessage As String 'String to hold all of the above
   Public sEsc As String 'Holds Escape ASCII Character
   Public sForeColorStr As String 'holds foreground colour of text

   Private Sub ................................
       'set escape string
       sEsc = Chr(&H1BS)

       bSocketInUse = False
       ' initialise to red text on black background
       sForeColorStr = Chr(27) & "[31;40m"

       Dim strMessage As String = ""
       Dim strEsc As String = Chr(&H1BS) 'Holds Escape ASCII Character
       sHeader = Chr(&H99S)
       sNumMessage = Chr(&H1S)
       sNumDestination = Chr(&H1S)
       sNumSigns = Chr(&H1S)
       sMessHigh = Chr(0)

       sMessText1 = strEsc & "[2J" & strEsc & "[1;1H" & sForeColorStr & "0937"

       sMessLow = Chr(Len(Trim(sMessText1)) + Len(Trim(sMessText2)))

       'build message for transmission
       sMessage = sHeader & sNumMessage & sNumDestination & sNumSigns & sMessLow & sMessHigh ' this is the message header stuff
       sMessage = sMessage & sMessText1  'add text for top line ' & sEsc & "[4x"

       bytChecksum = 0
       ' update checksum using each byte of the message
       For i As Integer = 1 To Len(sMessage)
           bytChecksum = RotateLeft(bytChecksum)
           bytChecksum = bytChecksum Xor Asc(Mid(sMessage, i, 1))
       Next
       ' do one further rotation
       bytChecksum = RotateLeft(bytChecksum)
       ' and append the checksum to the message
       sMessage = sMessage & Chr(bytChecksum)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...