[英]Python 2.7 / Linux: socket library binding type error
I am attempting to write a very simple server in python. 我试图用python写一个非常简单的服务器。
import socket
import sys
# Create a TCP/IP socket to listen on
server = socket.socket(socket.SOL_SOCKET, socket.SOCK_STREAM)
# Prevent from 'address already in use' upon server restart
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# Bind the socket to port 8081 on all interfaces
server_address = ('localhost', 8081)
print 'starting up on %s port %s' % server_address
server.bind(server_address)
I have read what I think to be correct documentation for the socket library, and it suggests that the server.bind() takes an argument of a tuple. 我已经阅读了我认为是套接字库的正确文档的文档,它表明server.bind()接受一个元组的参数。 However, I get this error: 但是,我收到此错误:
starting up on localhost port 8081
Traceback (most recent call last):
File "pyserver.py", line 14, in <module>
server.bind(server_address)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
TypeError: argument must be string or read-only character buffer, not tuple
I have changed the argument to only a string, as the error warning suggests, and I get a 如错误警告所示,我已将参数更改为仅字符串,并且得到了
[Errno 98] Address already in use
error. 错误。 I thought that the 8th line was in place to prevent that. 我以为第8行就可以防止这种情况发生。 What is going on? 到底是怎么回事?
The first argument to the socket.socket
should be address family: socket.socket
的第一个参数应该是地址族:
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
^^^^^^^^^^^^^^
Except that, your code should work. 除此之外,您的代码应该可以工作。
Reason of the error message : argument must be string ... 错误消息的原因 : 参数必须为字符串...
In Linux, the value of the socket.SOL_SOCKET
is 1 which is equal to the value of socket.AF_UNIX
. 在Linux中,的值socket.SOL_SOCKET
是1,其等于的值socket.AF_UNIX
。 Unix domain socket (AF_UNIX) use path (string) as a address Unix域套接字(AF_UNIX)使用路径(字符串)作为地址
>>> import socket
>>> socket.AF_UNIX
1
>>> socket.SOL_SOCKET
1
UPDATE UPDATE
Regarding Already already in use error, see SO_REUSEADDR and AF_UNIX . 关于“ 已经使用中”错误,请参见SO_REUSEADDR和AF_UNIX 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.