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