通过go-socked.io接收字节数组时出错

时间:2016-12-25 09:26:45

标签: go socket.io

我正在尝试将一个Int8Array从浏览器发送到go-socked.io,这是我的客户代码:

function init(){
    conn = io('http://localhost:8080/');
    var c = new Int8Array([127]);
    conn.emit('m',c)
}

这是我的服务器代码

func main() {
    server, err := socketio.NewServer(nil)
    if err!= nil{
        log.Fatal(err)
    }
    server.On("connection",on_connection)
    http.Handle("/socket.io/", server)
    http.Handle("/src/", maxAgeHandler(0,http.FileServer(http.Dir("./"))))
    http.Handle("/app/", maxAgeHandler(0,http.FileServer(http.Dir("./"))))
    http.ListenAndServe(":8080",nil)
}

func on_connection(so socketio.Socket){
    log.Println("On connection")
    so.Join("Room")
    so.On("m",func(msg *socketio.Attachment){
        b, _ := ioutil.ReadAll(msg.Data)    <---- I got error in this line
        fmt.Println(b)
    })

}

我说错了:

panic: runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: runtime error: invalid memory address or nil pointer dereference

我想知道如何读取消息中的字节数据。

1 个答案:

答案 0 :(得分:0)

您没有发送附件,只发送数据。此数据可以与map[string]int8映射使用,因为您正在发送一个int8数组,并在socketio中将其转换为映射。

func on_connection(so socketio.Socket) {
    log.Println("On connection")
    so.Join("Room")
    so.On("m", func(data map[string]int8) {
        array := make([]int8, len(data))
        for k, v := range data {
            pos, _ := strconv.Atoi(k)
            array[pos] = v
        }
        fmt.Println(array)
    })
}