我想在我的计算机上设置一个服务器,并在我的计算机上使用域套接字连接到服务器。我看过各种蟒蛇向导,但我似乎无法找到答案!这是我迄今为止的代码。
客户端:
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
答案 0 :(得分:3)
要回答您询问的错误问题,documentation说:
单个字符串用于AF_UNIX地址族。一对(主机,端口)用于AF_INET地址族
提到的字符串是Unix套接字文件名。对于Unix套接字,请忘记主机和端口。
所以你应该改变:
listen_socket.bind((HOST, PORT))
进入(例如)
listen_socket.bind(SOCKET_ID)
并相应地将SOCKET_ID
定义为文件名,例如/tmp/my_socket
(例如,可能使用a temporary file更好,不确定)。不管它是什么,你应该在一个地方定义它,而不是在两个不同的文件中硬编码。
关于您在问题中提供的完整代码,可能还有其他一些事情要说,但它们并不属于这个问题。