2017-01-21 2 views
0

에서 실행중인 유닉스 소켓에 명령을 실행하여 mpv을 제어하는 ​​golang 프로그램을 작성하려고합니다.golang을 사용하여 유닉스 소켓으로 JSON 보내기

이것은 내가 지금까지 시도한 것입니다 : 이것은 MPV가 종료하지만 아무 일도 발생하지 일으킬해야

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)     
    }            
}             

.

이 명령

은 예상 된 결과를 얻기 위해 명령 줄을 통해 실행할 수 있습니다

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

그것은 소켓에 JSON을 보내 socat를 사용합니다. Golang을 사용하여 이것을 소켓으로 어떻게 보낼 수 있습니까?

+2

' echo'는 개행 문자를 보내고 Go 프로그램은 그렇지 않습니다. –

+0

@AndySchweig 네, 그게 다야! – hermancain

답변

0

위의 의견에서 @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)     
    }            
}          
+1

또한'b, err = c.Write (...')로 작성된 바이트를 검사하여 전체 문자열이 전송되었는지 확인하십시오. – Xeoncross

관련 문제