程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python中的套接字編程

編輯:Python


文章目錄

  • **連接到服務器:**
    • **一個簡單的服務器客戶端程序:**
      • **服務器**
      • **客戶端**

套接字編程是一種連接網絡上的兩個節點以相互通信的方法。一個套接字(節點)偵聽 IP 處的特定端口,而另一個套接字則伸向另一個套接字以形成連接。服務器形成偵聽器套接字,而客戶端則連接到服務器。
他們是網頁浏覽背後的真正支柱。簡單來說,有一個服務器和一個客戶端。
套接字編程是通過導入套接字庫並創建一個簡單的套接字來開始的。

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

在這裡,我們制作了一個套接字實例,並向它傳遞了兩個參數。第一個參數為AF_INET,第二個參數為SOCK_STREAM。AF_INET是指地址系列 ipv4。SOCK_STREAM表示面向連接的 TCP 協議。
現在,我們可以使用此套接字連接到服務器。

連接到服務器:

請注意,如果在創建套接字期間發生任何錯誤,則為套接字。錯誤被拋出,我們只能通過知道其IP連接到服務器。您可以使用以下命令查找服務器的IP:

$ ping www.google.com

你也可以使用python找到IP:

import socket
ip = socket.gethostbyname('www.google.com')
print(ip)

輸出結果:

下面是用於連接到 Google 的腳本示例。


import socket
import sys
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("已成功創建套接字")
except socket.error as err:
print("套接字創建失敗,出現錯誤 %s" % (err))
# 套接字默認端口
port = 80
try:
host_ip = socket.gethostbyname('www.google.com')
except socket.gaierror:
print("解析主機時出錯")
sys.exit()
# 連接到服務器
s.connect((host_ip, port))
print("套接字已成功連接到google")

運行結果:

  • 首先,我們做了一個插座。
  • 然後我們解決了谷歌的IP,最後,我們連接到谷歌。
  • 現在我們需要知道如何通過套接字發送一些數據。
  • 對於發送數據,套接字庫具有 sendall 函數。此函數允許您將數據發送到套接字連接到的服務器,並且服務器還可以使用此函數將數據發送到客戶端。

一個簡單的服務器客戶端程序:

服務器

服務器有一個 bind() 方法,該方法將其綁定到特定的 IP 和端口,以便它可以偵聽該 IP 和端口上的傳入請求。服務器有一個 listen() 方法,它將服務器置於偵聽模式。這允許服務器偵聽傳入連接。最後,服務器有一個 accept() 和 close() 方法。accept 方法啟動與客戶端的連接,close 方法關閉與客戶端的連接。

# 首先導入套接字庫
import socket
# 接下來創建套接字對象
s = socket.socket()
print ("已成功創建套接字")
# 在您的計算機上保留一個端口在我們的情況下是12345,但可以是任何端口
port = 12345
#接下來綁定到端口,我們沒有在ip字段中鍵入任何ip,而是輸入了一個空字符串,這使服務器偵聽來自網絡上其他計算機的請求
s.bind(('', port))
print ("套接字綁定到 %s" %(port))
# 切換套接字到監聽模式
s.listen(5)
print ("套接字正在偵聽")
# 一個永遠的循環,直到我們中斷它或發生錯誤
while True:
# 與客戶端建立連接。
c, addr = s.accept()
print ('已從獲得連接', addr )
# 向客戶發送感謝信息。編碼以發送字節類型。
c.send('感謝您的連接'.encode())
# 關閉與客戶端的連接
c.close()
# 打破循環
break
  • 首先,我們導入套接字是必要的。
  • 然後我們制作了一個套接字對象,並在我們的PC上保留了一個端口。
  • 之後,我們將服務器綁定到指定的端口。傳遞空字符串意味著服務器也可以偵聽來自其他計算機的傳入連接。如果我們通過127.0.0.1,那麼它將只偵聽在本地計算機中進行的那些調用。
  • 5 在這裡,我們將服務器置於偵聽模式,這意味著如果服務器繁忙,則 5 個連接將一直等待,如果第 6 個套接字嘗試連接,則連接將被拒絕。
  • 最後,我們進行一段時間循環,並開始接受所有傳入連接,並在向所有連接的套接字發送感謝消息後關閉這些連接。

客戶端

現在我們需要一些服務器可以與之交互的東西。我們可以像這樣信奉服務器,只是為了知道我們的服務器正在工作。在終端中鍵入以下命令:


# 啟動服務器
$ python server.py
# 保持上述端子打開
# 現在打開另一個終端並鍵入:
$ telnet localhost 12345

如果報以下錯誤:

可以在控制面板中點擊啟用或關閉windows功能中找到telent 客戶端 並勾選 點擊確定

輸出:

# #在服務器中。py端子您將看到以下輸出:
已成功創建套接字
套接字綁定到 12345
套接字正在偵聽
Got connection from ('127.0.0.1', 52617)
# 在telnet終端中,您將看到:
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
感謝您的連接.

此輸出顯示我們的服務器正在工作。
現在對於客戶端:

# 導入socket 模塊
import socket
# 船艦socket 對象
s = socket.socket()
# 定義要連接的端口
port = 12345
# 連接到本地計算機上的服務器
s.connect(('127.0.0.1', port))
# 從服務器接收數據並解碼以獲取字符串。
print(s.recv(1024).decode())
# 關閉連接
s.close()
  • 首先,我們制作一個套接字對象。
  • 然後,我們在端口12345(運行服務器的端口)上連接到localhost,最後,我們從服務器接收數據並關閉連接。
  • 現在將此文件另存為 client.py,並在啟動服務器腳本後從終端運行它。

運行結果:


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved