使用golang

时间:2017-01-21 16:55:06

标签: sockets go network-programming unix-socket

我正在尝试通过向运行在mpv的unix套接字发出命令来编写一个golang程序来控制/tmp/mpvsocket

这是我到目前为止所尝试的:

func main() {                                     
  c, err := net.Dial("unix", "/tmp/mpvsocket")    
  if err != nil {                                 
    panic(err)                                    
  }                                               
  defer c.Close()                                 

  _, err = c.Write([]byte(`{"command":["quit"]}`))
  if err != nil {                                 
    log.Fatal("write error:", err)                
  }                                               
}                                                 

这应该导致mpv退出但没有任何反应。

可以通过命令行发出此命令以获得预期结果:

echo '{ "command": ["quit"] }' | socat - /tmp/mpvsocket

它使用socat将JSON发送到套接字。如何使用Golang将其发送到套接字?

1 个答案:

答案 0 :(得分:1)

感谢@AndySchweig在上面的评论中,我需要在我的JSON之后换一个新行。

固定线路:

  _, err = c.Write([]byte(`{"command":["quit"]}` + "\n"))

完整的固定代码块:

func main() {                                     
  c, err := net.Dial("unix", "/tmp/mpvsocket")    
  if err != nil {                                 
    panic(err)                                    
  }                                               
  defer c.Close()                                 

  _, err = c.Write([]byte(`{"command":["quit"]}` + "\n"))
  if err != nil {                                 
    log.Fatal("write error:", err)                
  }                                               
}