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

huangapple go评论114阅读模式
英文:

Error in Receiving byte array via go-socked.io

问题

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

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

这是我的服务器代码:

  1. func main() {
  2. server, err := socketio.NewServer(nil)
  3. if err != nil {
  4. log.Fatal(err)
  5. }
  6. server.On("connection", on_connection)
  7. http.Handle("/socket.io/", server)
  8. http.Handle("/src/", maxAgeHandler(0, http.FileServer(http.Dir("./"))))
  9. http.Handle("/app/", maxAgeHandler(0, http.FileServer(http.Dir("./"))))
  10. http.ListenAndServe(":8080", nil)
  11. }
  12. func on_connection(so socketio.Socket) {
  13. log.Println("On connection")
  14. so.Join("Room")
  15. so.On("m", func(msg *socketio.Attachment) {
  16. b, _ := ioutil.ReadAll(msg.Data) // <---- I got error in this line
  17. fmt.Println(b)
  18. })
  19. }

我得到的错误信息是:

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

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

英文:

I am trying to send an Int8Array from browser to go-socked.io, here is my client's code:

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

This is my server code

  1. func main() {
  2. server, err := socketio.NewServer(nil)
  3. if err!= nil{
  4. log.Fatal(err)
  5. }
  6. server.On("connection",on_connection)
  7. http.Handle("/socket.io/", server)
  8. http.Handle("/src/", maxAgeHandler(0,http.FileServer(http.Dir("./"))))
  9. http.Handle("/app/", maxAgeHandler(0,http.FileServer(http.Dir("./"))))
  10. http.ListenAndServe(":8080",nil)
  11. }
  12. func on_connection(so socketio.Socket){
  13. log.Println("On connection")
  14. so.Join("Room")
  15. so.On("m",func(msg *socketio.Attachment){
  16. b, _ := ioutil.ReadAll(msg.Data) <---- I got error in this line
  17. fmt.Println(b)
  18. })
  19. }

The error I got said:

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

I would like to know how to read the byte data in the message.

答案1

得分: 0

你没有发送附件,只是发送了数据。这些数据可以使用map[string]int8进行映射,因为你发送的是int8数组,而在socketio中,它被翻译为一个map。

  1. func on_connection(so socketio.Socket) {
  2. log.Println("On connection")
  3. so.Join("Room")
  4. so.On("m", func(data map[string]int8) {
  5. array := make([]int8, len(data))
  6. for k, v := range data {
  7. pos, _ := strconv.Atoi(k)
  8. array[pos] = v
  9. }
  10. fmt.Println(array)
  11. })
  12. }
英文:

You aren't sending an attachment, just data. This data can be used mapped with map[string]int8 because you're sending an array of int8 and this is translated as a map in socketio.

<!-- language: go -->

  1. func on_connection(so socketio.Socket) {
  2. log.Println(&quot;On connection&quot;)
  3. so.Join(&quot;Room&quot;)
  4. so.On(&quot;m&quot;, func(data map[string]int8) {
  5. array := make([]int8, len(data))
  6. for k, v := range data {
  7. pos, _ := strconv.Atoi(k)
  8. array[pos] = v
  9. }
  10. fmt.Println(array)
  11. })
  12. }

huangapple
  • 本文由 发表于 2016年12月25日 17:26:44
  • 转载请务必保留本文链接:https://go.coder-hub.com/41319992.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定