使用带有 python 的域套接字设置本地服务器



我想在我的计算机上设置一个服务器,并使计算机上的另一个进程使用域套接字连接到服务器。我看过各种 python 指南,但我似乎找不到直接的答案!这是我到目前为止的代码。

客户:

import socket;
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM);
s.connect("8888")

服务器:

import socket
HOST, PORT = 'host', 8888
listen_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind((HOST, PORT))
listen_socket.listen(1)
print 'Serving HTTP on port %s ...' % PORT
while True:
    client_connection, client_address = listen_socket.accept()
    request = client_connection.recv(1024)
    print request
    http_response = """
HTTP/1.1 200 OK
Hello, World!
"""
    client_connection.sendall(http_response)
    client_connection.close()

运行服务器时出现以下错误:

Traceback (most recent call last):
  File "webServer.py", line 7, in <module>
    listen_socket.bind((HOST, PORT))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
TypeError: argument must be string or read-only character buffer, not tuple

为了回答您提出的有关您遇到的错误的问题,文档说:

单个字符串用于AF_UNIX地址系列。一对(主机、端口)用于AF_INET地址族

提到的字符串是 Unix 套接字文件名。对于 Unix 套接字,忘记主机和端口。

所以你应该改变:

listen_socket.bind((HOST, PORT))

进入(例如)

listen_socket.bind(SOCKET_ID)

并相应地将SOCKET_ID定义为文件名,例如/tmp/my_socket(例如,也许使用临时文件更好,不确定)。无论它是什么,您都应该在一个地方定义它,而不是在两个不同的文件中硬编码它。

关于您在问题中输入的完整代码,可能还有其他话要说,但它们不属于问题。

最新更新