如何使用Socket-Python获取星号服务器的状态
我试图使用python套接字获取星号服务器的状态,但什么也没发生 这是我的密码:如何使用Socket-Python获取星号服务器的状态,python,sockets,asterisk,Python,Sockets,Asterisk,我试图使用python套接字获取星号服务器的状态,但什么也没发生 这是我的密码: import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) HOST = '192.168.1.105' PORT = 5038 s.connect((HOST, PORT)) params = """Action: login Events: off Username: admin Secret: mypass Action: st
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
HOST = '192.168.1.105'
PORT = 5038
s.connect((HOST, PORT))
params = """Action: login
Events: off
Username: admin
Secret: mypass
Action: status
Action: Logoff
"""
s.send(params)
data = s.recv(1024)
print data + '\n'
s.close()
我刚收到一条信息,上面写着星号版本,没别的
我希望有人能帮我
提前感谢。您的代码格式不正确。星号AMI要求命令之间\r\n终止 您需要在单独的数据包中发送每个命令:
params = """Action: login
Events: off
Username: admin
Secret: mypass"""
s.send(params + '\r\n')
data = s.recv(1024)
print data + '\n'
params = 'Action: status'
s.send(params + '\r\n')
data = s.recv(1024)
print data + '\n'
params = 'Action: Logoff'
s.send(params + '\r\n')
data = s.recv(1024)
print data + '\n'
这应该能奏效。显然,您还需要为它创建一个函数或其他什么,但这会使它工作
总是把AMI命令分开 即使是这样简单的基于TCP的协议的处理也可能变得棘手 这种情况下的问题:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
HOST = '192.168.1.105'
PORT = 5038
s.connect((HOST, PORT))
params = ["Action: login",
"Events: off",
"Username: admin",
"Secret: mypass"]
s.send("\r\n".join(params) + "\r\n")
# receive login response
data = ""
while "\r\n" not in data:
data += s.recv(1024)
s.send("Action: status\r\n\r\n")
# receive action response
data = ""
while "\r\n" not in data:
data += s.recv(1024)
print repr(data)
s.send("Action: Logoff\r\n\r\n")
s.close()
谢谢你的回答。我尝试了您的解决方案,但当我执行:params='Action:status's.send(params+'\r\n')data=s.recv(1024)时,什么也没有发生。Python控制台停留在那里,什么也没有。您是否为运行AMI程序的用户帐户设置了正确的权限?查看voip信息页面(它包含执行该命令所需的权限列表):另外,不要在python控制台中测试这一点。输入的延迟可能会导致超时。将代码放入python程序并运行它以获得可靠的结果。