Usually in these cases it helps to bring up the diff between the bytes:

<https://lh3.googleusercontent.com/-SzaoriDYD-c/V43aSOMR1iI/AAAAAAAACKc/ycqDFbZyKcEZEfIB7zavcefLgM97SDzvgCLcB/s1600/gps.png>

So the things I noticed here, 
* the data definitely is not ASCII
* it looks like some GPS protocol, find the spec how to properly parse it.
* Go data looks more what I would expect than Python; Python seems to be 
converting the data into ASCII range, *notice how most of the differences 
are in bytes higher than 0x80.*

So, find the GPS protocol spec and reference application and first 
implement that.

+ Egon

On Tuesday, 19 July 2016 06:58:58 UTC+3, EdgarAlejandro Vintimilla wrote:
>
> In GO I get this data 
>
> buf := make([]byte, 1024)
> buf:  [64 64 153 0 4 50 49 51 71 76 50 48 49 52 48 49 53 49 56 55 0 0 0 0 
> 0 16 1 233 24 140 87 64 25 140 87 68 88 10 0 136 2 0 0 182 29 0 0 4 0 0 0 4 
> 0 7 100 1 17 19 0 3 0 1 17 7 16 23 43 59 76 94 160 0 244 82 243 16 7 0 0 0 
> 0 73 68 68 95 50 49 51 71 48 50 95 83 32 86 50 46 50 46 54 0 73 68 68 95 50 
> 49 51 71 48 50 95 72 32 86 50 46 50 46 54 0 13 0 1 24 2 24 1 26 1 30 1 31 2 
> 31 3 31 4 31 5 31 6 31 7 31 1 33 2 33 224 55 13 10] []uint8
>
> cadena += fmt.Sprintf("%x ", buf[i])
> cadena:  40 40 99 0 4 32 31 33 47 4c 32 30 31 34 30 31 35 31 38 37 0 0 0 0 
> 0 10 1 e9 18 8c 57 40 19 8c 57 44 58 a 0 88 2 0 0 b6 1d 0 0 4 0 0 0 4 0 7 
> 64 1 11 13 0 3 0 1 11 7 10 17 2b 3b 4c 5e a0 0 f4 52 f3 10 7 0 0 0 0 49 44 
> 44 5f 32 31 33 47 30 32 5f 53 20 56 32 2e 32 2e 36 0 49 44 44 5f 32 31 33 
> 47 30 32 5f 48 20 56 32 2e 32 2e 36 0 d 0 1 18 2 18 1 1a 1 1e 1 1f 2 1f 3 
> 1f 4 1f 5 1f 6 1f 7 1f 1 21 2 21 e0 37 d  string
>
>
> and python
>
> 4040990004323133474c323031343031353138370000000000100111a38d5766a38d57855d0a0000000000c21d0000010000000400076401111e000300011307100331317e4aa000f245f310000000008c4944445f3231334730325f532056322e322e36004944445f3231334730325f482056322e322e36000d0001180218011a011e011f021f031f041f051f061f071f0121022171a40d0a
>
>
>
> -------------------------------------------------------------------------------------------------------------------
> On Monday, July 18, 2016 at 1:23:05 AM UTC-5, Egon wrote:
>>
>> What is the difference in the data that you receive?
>>
>> On Monday, 18 July 2016 05:42:36 UTC+3, EdgarAlejandro Vintimilla wrote:
>>>
>>> now I have this, but still not the correct results
>>>
>>> package main
>>>
>>> import (
>>>     "fmt"
>>>     "net"
>>>     "os"
>>>     //"strconv"
>>>     //"bytes"
>>> //"io/ioutil"
>>> //"net/http"
>>>     "reflect"
>>>     //"strings"
>>> )
>>>
>>> const (
>>>     CONN_HOST = ""
>>>     CONN_PORT = "5555"
>>>     CONN_TYPE = "tcp"
>>> )
>>>
>>> func main() {
>>>     // Listen for incoming connections.
>>>     l, err := net.Listen(CONN_TYPE, CONN_HOST+":"+CONN_PORT)
>>>     if err != nil {
>>>         fmt.Println("Error listening:", err.Error())
>>>         os.Exit(1)
>>>     }
>>>     // Close the listener when the application closes.
>>>     defer l.Close()
>>>     fmt.Println("Listening on " + CONN_HOST + ":" + CONN_PORT)
>>>     for {
>>>         // Listen for an incoming connection.
>>>         conn, err := l.Accept()
>>>         if err != nil {
>>>             fmt.Println("Error accepting: ", err.Error())
>>>             os.Exit(1)
>>>         }
>>>         // Handle connections in a new goroutine.
>>>         go handleRequest(conn)
>>>     }
>>> }
>>>
>>> // Handles incoming requests.
>>> func handleRequest(conn net.Conn) {
>>>
>>>   // Make a buffer to hold incoming data.
>>>   buf := make([]byte, 1024)
>>>
>>>   // Read the incoming connection into the buffer.
>>>   reqLen, err := conn.Read(buf)
>>>   buf = buf[:reqLen]
>>>
>>>   if err != nil {
>>>     fmt.Println("Error reading:", err.Error())
>>>   }
>>>
>>>   var cadena string = ""
>>>   for i := 0; i < len(buf)-1; i++ {
>>>     cadena += fmt.Sprintf("%x ", buf[i])
>>>   }
>>>
>>>
>>>   // Send a response back to person contacting us.
>>>   conn.Write([]byte( "ok" ))
>>>   fmt.Println("cadena: ", cadena, reflect.TypeOf(cadena) )
>>>   fmt.Println( "\n" )
>>>
>>>   // Close the connection when you're done with it.
>>>   conn.Close()
>>>     
>>> }
>>>
>>>
>>>
>>> On Sunday, July 17, 2016 at 2:05:22 PM UTC-5, Egon wrote:
>>>>
>>>> On Sunday, 17 July 2016 21:42:26 UTC+3, EdgarAlejandro Vintimilla wrote:
>>>>>
>>>>> Hi, I have a GPS that sends me data through a connection TCP
>>>>>
>>>>> the data it sends me are in ASCII, and I have to convert it to HEX
>>>>>
>>>>> for example in python I'm doing this 
>>>>>
>>>>>     BUFFER_SIZE = 1024
>>>>>     conn, addr = s.accept()
>>>>>     data = conn.recv(BUFFER_SIZE)
>>>>>     data.encode("hex")
>>>>>     conn.close()
>>>>>     print data
>>>>>
>>>>> and it works.
>>>>>
>>>>> but in GO, 
>>>>>
>>>>>   buf := make([]byte, 1024)
>>>>>   reqLen, err := conn.Read(buf)
>>>>>
>>>>
>>>> Note, from here you are not using reqLen, you probably should do:
>>>> buf = buf[:reqLen], although if the conn is not fast enough you may not 
>>>> receive the full request.
>>>>  
>>>>
>>>>>   if err != nil {
>>>>>     fmt.Println("Error: ", err.Error())
>>>>>   }
>>>>>
>>>>>   fmt.Println("buf: ", buf) 
>>>>>   fmt.Println("buf str: ", string(buf))
>>>>>
>>>>
>>>> this []byte to string conversion assumes that "buf" is encoded as UTF8, 
>>>> so if you have bytes that are larger than 0x7f you might get bizarre 
>>>> results. *(Although I know you mentioned ASCII, it might also be 
>>>> Extended ASCII)*
>>>>  
>>>>
>>>>>   var str string = ""
>>>>>   for i:=0; i< len(buf); i++{
>>>>>     str += strconv.FormatUint(uint64(buf[i]), 16)
>>>>>   }
>>>>>   fmt.Println("str: ", str) 
>>>>>
>>>>> or if I use io, error2 :=ioutil.ReadAll(connection) i do not get the 
>>>>> exact data that it sends me in any way
>>>>>
>>>>
>>>> data, err := ioutil.ReadAll(conn)
>>>> if err != nil { panic(err) }
>>>> enc := hex.EncodeToString(data)
>>>> fmt.Println("hex:", enc)
>>>>
>>>>
>>>> Also you should be probably reading up to the message sequence not 
>>>> everything. Protocols usually define some ending character or sequence, or 
>>>> have a leading length of message. I suspect you should read up-to a 
>>>> line-feed instead of everything. And also that might be the reason that 
>>>> you 
>>>> get different results from Go and Python.
>>>>
>>>> + Egon
>>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to