HOWTO · Python

使用 Python 套接字傳送字串

在計算機程式設計中,套接字程式設計連線同一網路上的兩個或多個節點以相互通訊。這些節點中的一個充當伺服器的角色,而另一個充當客戶端。

本頁內容

在本文中,我們將介紹套接字、套接字中的內建方法、伺服器和客戶端,以及如何在 Python 中實現與套接字的成功通訊。套接字在伺服器端和客戶端之間起著橋樑的作用,用於接收和傳送資料。

在 Python 程式碼中,我們將建立套接字,在套接字的幫助下,我們將傳遞字串並在客戶端和伺服器之間建立連線。

Python 中的套接字

套接字定義為為接收和傳送資料而構建的端點。單個網路中有兩個套接字;套接字中存在 IP 地址和埠的組合。

單個裝置有 n 個基於埠號的套接字。不同型別的埠可用於不同的協議。

以下是一些標準埠號及其協議。

協議 描述
HTTP 它的埠號是 80,它的 Python 庫是 httplib、urllib 和 xmlrpclib。HTTP 埠用於網頁。
FTP 它的埠號是 20,它的 Python 庫是 ftplib 和 urllib。此埠用於檔案傳輸。
NNTP 它的埠號是 119,它的 Python 庫是 nntplib。此埠用於未傳送的訊息。
SMTP 它的埠號是 25,它的 Python 庫是 smtplib。此埠用於傳送電子郵件。
TELNET 它的埠號是 23,它的 Python 庫是 telnetlib。此埠用於命令列。
Pop3 它的埠號是 110,它的 Python 庫是 poplib。此埠用於獲取電子郵件。
Gopher 它的埠號是 70,它的 Python 庫是 gopherlib。此埠用於檔案傳輸。

在 Python 中實現套接字的內建方法

我們必須匯入 Socket 模組或框架以在 Python 中實現套接字。所有這些模組都包含內建方法,這些方法有助於建立套接字並有助於相互關聯。

以下是一些強大的套接字內建方法:

  • Socket.socket() 方法建立套接字。雙方都需要它,例如客戶端和伺服器端。
  • Socket.accept() 用於接受連線。Socket.accept() 方法返回一對值,例如 (conn, address)。
  • Socket.bind() 用於繫結指定為引數的地址。
  • Socket.close() 表示套接字已關閉。
  • Socket.connect() 用於連線作為引數指定的地址。
  • Socket.listen() 用於偵聽伺服器或客戶端中的命令。

Socket 程式設計中的客戶端和伺服器

下面,你將瞭解套接字程式設計中客戶端和伺服器的含義。

客戶

從伺服器接收資訊或資料的計算機或軟體稱為客戶端。客戶端向伺服器請求服務; Web 瀏覽器是客戶端的最佳示例。

伺服器

伺服器是用於管理網路資源的程式、計算機或裝置。伺服器可以是同一裝置、本地計算機或遠端計算機。

在 Python Socket 中使用客戶端-伺服器通訊傳送字串

我們將建立兩個檔案用於從 Python 檔案中的套接字進行通訊——一個用於伺服器端,另一個用於客戶端。並且將有兩個用於建立連線的程式。

Python Socket 中的伺服器端

我們將首先建立伺服器端程式碼。我們將使用內建方法來建立伺服器端程式碼。

伺服器端的程式碼如下。

import socket

s = socket.socket(
    socket.AF_INET, socket.SOCK_STREAM
)  # Socket will create with TCP and IP protocols
# This method will bind the sockets with server and port no
s.bind(("localhost", 9999))
s.listen(1)  # Will allow a maximum of one connection to the socket
c, addr = s.accept()  # will wait for the client to accept the connection

print("CONNECTION FROM:", str(addr))  # Will display the address of the client

c.send(
    b"HELLO, Are you enjoying programming?/Great! Keep going"
)  # Will send message to the client after encoding

msg = "Take Care.............."
c.send(msg.encode())
c.close()  # Will disconnect from the server

輸出:

This connection is from: ('127.0.0.1', 50802)

Python Socket 中的客戶端

客戶端將訊息傳送到伺服器,伺服器將響應該訊息。客戶端還將在程式碼中使用內建方法。

在客戶端,我們將首先建立一個套接字。然後我們將連線主機的 IP 地址和埠號。

程式碼:

import socket

s = socket.socket(
    socket.AF_INET, socket.SOCK_STREAM
)  # Socket will create with TCP and, IP protocols
s.connect(("localhost", 9999))  # Will connect with the server
# Will receive the reply message string from the server at 1024 B
msg = s.recv(1024)

while msg:
    print("Received:" + msg.decode())
    msg = s.recv(1024)  # Will run as long as the message string is empty

s.close()  # Will disconnect the client

輸出:

The message is Revived: HELLO, Are you enjoying programming?    Great! Keep going

The message is Revived: Take Care..............

當給定的程式碼執行時,將在伺服器和客戶端之間建立連線。連線後,客戶端螢幕將顯示一條訊息。

訊息將是:

HELLO, Are you enjoying programming?    Great! Keep going

另一條訊息將是:

Take Care..............

此訊息將顯示在客戶端,因為它是由伺服器端傳送的。這樣,程式碼將執行並給出通過 Python 中的套接字傳送字串的輸出。