【发布时间】:2016-05-25 16:07:59
【问题描述】:
我正在开发一个 GUI 应用程序,UI 是使用 python(+kivy) 开发的,核心是使用 GoLang 实现的。
我的应用程序涉及将数据从 UI 传递到 Core,为此我使用管道。以下是 Client 和 Server 代码的 sn-p。
客户端.py:
p = win32pipe.CreateNamedPipe(r'\\.\pipe\test_pipe',
win32pipe.PIPE_ACCESS_DUPLEX,
win32pipe.PIPE_TYPE_MESSAGE |win32pipe.PIPE_WAIT,
1, 65536, 65536,300,None)
win32pipe.ConnectNamedPipe(p, None)
data = "Hello Pipe"
win32file.WriteFile(p, bytes(data,"UTF-8"))
Server.go:
ln, err := npipe.Listen(`\\.\pipe\test_pipe`)
if err != nil {
// handle error
}
for {
conn, err := ln.Accept()
if err != nil {
// handle error
continue
}
// handle connection like any other net.Conn
go func(conn net.Conn) {
r := bufio.NewReader(conn)
msg, err := r.ReadString('\n')
if err != nil {
// handle error
return
}
fmt.Println(msg)
}(conn)
}
使用上面的代码,我无法在它们之间建立连接。我的应用程序涉及客户端和服务器之间的双工通信
感谢任何形式的帮助!
【问题讨论】:
-
第一个猜测:你必须
npipe.Dial从 go 到你的命名管道。您是否有任何err正在运行您的代码? -
没有错误,“ConnectNamedPipe”似乎没有检测到服务器。我用 Python 实现的服务器尝试了相同的代码,它工作正常。
-
afaik
CreateNamedPipe创建管道等待连接,npipe.Listen也创建管道等待连接 -
我正在尝试建立单向通信,然后再使其成为双工。所以,我的 sn-p 确实包含您需要的代码。
标签: python go client-server named-pipes