1. 程式人生 > >python socket.error: [Errno 48] Address already in use

python socket.error: [Errno 48] Address already in use

簡單例項

服務端

我們使用 socket 模組的 socket 函式來建立一個 socket 物件。socket 物件可以通過呼叫其他函式來設定一個 socket 服務。

現在我們可以通過呼叫 bind(hostname, port) 函式來指定服務的 port(埠)

接著,我們呼叫 socket 物件的 accept 方法。該方法等待客戶端的連線,並返回 connection 物件,表示已連線到客戶端。

完整程式碼如下:

#!/usr/bin/python# -*- coding: UTF-8 -*-# 檔名:server.pyimport socket               
# 匯入 socket 模組 s = socket.socket()# 建立 socket 物件 host = socket.gethostname()# 獲取本地主機名 port =12345# 設定埠 s.bind((host, port))# 繫結埠 s.listen(5)# 等待客戶端連線whileTrue: c, addr = s.accept()# 建立客戶端連線。print'連線地址:', addr c.send('歡迎訪問菜鳥教程!') c.close()# 關閉連線

客戶端

接下來我們寫一個簡單的客戶端例項連線到以上建立的服務。埠號為 12345。

socket.connect(hosname, port ) 方法開啟一個 TCP 連線到主機為 hostname 埠為 port 的服務商。連線後我們就可以從服務端後期資料,記住,操作完成後需要關閉連線。

完整程式碼如下:

#!/usr/bin/python# -*- coding: UTF-8 -*-# 檔名:client.pyimport socket               # 匯入 socket 模組

s = socket.socket()# 建立 socket 物件
host = socket.gethostname()# 獲取本地主機名
port =12345# 設定埠好

s
.connect((host, port))print s.recv(1024) s.close()

現在我們開啟連個終端,第一個終端執行 server.py 檔案:

$ python server.py

第二個終端執行 client.py 檔案:

$ python client.py 
歡迎訪問菜鳥教程!

這是我們再開啟第一個終端,就會看到有以下資訊輸出:

連線地址:('192.168.0.118',62461)

當我們執行上面的簡單例子時,經常遇到這個錯誤。

那麼怎麼解決呢。給出兩個簡單的辦法

開啟終端,輸入sudo lsof -i:XXXX

xxxx是你剛剛用來開啟服務的埠號

然後執行kill AAAA

aaaa是出現的那個PID

第二個辦法,開啟終端,輸入ps,回車

找到含有“python”關鍵詞的PID,kill