python socket.error: [Errno 48] Address already in use
阿新 • • 發佈:2019-02-17
簡單例項
服務端
我們使用 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