![](/img/trans.png)
[英]How to coreclty solve ZMQ socket error “zmq.error.ZMQError: Address in use” in python
[英]How to solve python socket error?
我正在關注這個例子 ,
#!/usr/bin/python # This is server.py file
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.bind((host, port)) # Bind to the port
s.listen(5) # Now wait for client connection.
while True:
c, addr = s.accept() # Establish connection with client.
print 'Got connection from', addr
c.send('Thank you for connecting')
c.close() # Close the connection
盡管網絡連接良好,但我仍然收到此錯誤消息:
>>> s.bind((host, port))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Applications/anaconda/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.gaierror: [Errno 8] nodename nor servname provided, or not known
我怎樣才能解決這個問題?
讓我們看一下docs :
socket.gethostname()
返回一個字符串,其中包含Python解釋器當前正在執行的機器的主機名。
如果您想知道當前機器的IP地址,則可能要使用gethostbyname(gethostname()) 。 此操作假定主機存在有效的主機到地址的映射 ,並且該假設並不總是成立。
注意:gethostname()並不總是返回完全限定的域名; 使用getfqdn()(請參見上文)。
我想這是發生了什么:綁定正在嘗試為主機建立IP地址,但是失敗了。 運行host = socket.gethostbyname(socket.gethostname())
,而不是有效的IP地址,您很可能會看到與調用bind時相同的錯誤。
您說返回的主機名有效,但是必須確保DNS響應者可以識別它。 例如,從命令行ping {hostname}
時,解析是否有效?
可能的解決方案是:
host = socket.getfqdn()
(以防萬一您沒有獲得完全合格的名稱,然后又無法正確解析)。 即使有效,我認為您也應該嘗試解決本地分辨率問題。 host = ''
),這在綁定時意味着“在所有可用接口上監聽”。 (這是文檔中的第一個示例 。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.