2015-09-10 44 views
0

我遇到了一個我正在創建的python服務器的問題。它適用於我的家用機器,但是當我嘗試在不同的機器上運行它時,它不起作用。當使用pyinstaller編譯,窗口immideatly關閉,當作爲原料Python文件(蟒蛇2.7.10安裝我家的機器,它是不是正在使用的機器上都)運行它引發錯誤:Python套接字 - 提供的參數無效

Traceback (most recent call last): 
    File "fileModifyServer.py", line 136, in <module> 
    startServer() 
File "fileModifyServer.py", line 11, in startServer 
    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
File "N:\Python27\lib\socket.py", line 191, in __init__ 
    _sock = _realsocket(family, type, proto) 
socket.error: [Errno 10022] An invalid argument was supplied 

我參考的代碼如下:

import socket 

def startServer(): 
    global serversocket 

    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    serversocket.bind((socket.gethostname(), 8010)) 
    serversocket.listen(5) 
    print "Server started" 
+0

就像我說的那樣,它可以在我的家用機器上運行,但不能在這臺機器上運行,所以您可能無法重現它,因爲它似乎是一臺機器特有的問題。 – Adam0410

+0

它沒有PF_INET屬性 – Adam0410

+0

嘗試不同於8010的端口? – linpingta

回答

0

你有的追蹤很奇怪。它在嘗試實例化套接字時會指示一行,這將表明您的python安裝或網絡堆棧存在問題。它也表明錯誤發生在第11行,但在你的代碼中有問題的行出現在第6行。我不確定它是如何發生的,但是我知道如果你在程序運行時編輯文件,然後它崩潰。回溯只是從導致錯誤的問題文件中打印出行號,並且在錯誤發生之前文件源似乎不會被讀取;因此,回溯將反映修改文件中的行,而不是編譯程序時出現的行,因此不是實際導致問題的行。

不看回溯,我看到你的代碼有錯誤。您正試圖將您的服務器綁定到無效的接口。由socket.gethostname返回的主機名不是接口。 From the documentation

If you want to know the current machine’s IP address, you may want to use gethostbyname(gethostname()). 
This operation assumes that there is a valid address-to-host mapping for the host, and the assumption does not always hold. 

# for example 
local_ip_address = socket.gethostbyname(socket.gethostname()) 

這將返回本地ip地址的字符串表示形式。不幸的是,這仍然會拋出一個錯誤,因爲它不是一個你可以綁定的接口。

您可以綁定的某些接口包括「0.0.0.0」(表示所有可用的接口)和「localhost」(僅表示「本地」連接),因此不允許外部網絡通信。