使用Python向套接字发送命令。

3

我正在尝试连接到一个套接字文件并发送一些命令:

#!/usr/bin/env python

import socket

s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/var/run/socket")
s.send('a command here')
data = s.recv(1024)
s.close()
print 'Received', repr(data)

我错过了什么吗?

我完全不懂Python。

提前感谢您的任何帮助!


2
你有服务器程序吗?你的程序是否会引发异常?出了什么问题? - falsetru
1个回答

0

您没有说明实际问题或展示任何错误,但是以下是一些需要检查的事项。

  1. 首先,请确认套接字是否存在?
  2. 您的客户端 Python 进程是否有权限访问套接字文件?
  3. 是否有一个服务器进程正在监听该套接字上的传入连接?

请注意,通信需要客户端和服务器。在客户端连接之前,服务器必须已经运行。服务器创建套接字,该套接字不得已经存在。

server.py

import os
import socket

address = '/tmp/socket'
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.bind(address)      # this creates the socket file
s.listen(1)
r, a = s.accept()
r.send('Hello\n')
msg = r.recv(1024)
print msg
r.close()
s.close()
os.unlink(address)    # remove the socket file so that it can be recreated on next run

运行此服务器,然后(在另一个终端中)运行您的客户端代码:

client.py

import socket

server_addr = '/tmp/socket'
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect(server_addr)
s.send('a command here')
data = s.recv(1024)
s.close()
print 'Received', repr(data)

是的,套接字已经存在(它是haproxy套接字),我有权限访问此套接字。我想向套接字发送一些信息,例如“show stats”、“show infos”,并打印结果。 - Manfred
那么,问题出在哪里呢?你看到任何错误了吗?你可能需要在命令之后发送一个新行。你能在服务器上打开日志/调试吗? - mhawke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接