1. 程式人生 > >Python - 套接字程式設計

Python - 套接字程式設計

Python提供兩種級別的網路服務訪問。在較低級別,您可以訪問底層作業系統中的基本套接字支援,這允許您為面向連線的協議和無連線協議實現客戶端和伺服器。

Python還具有庫,可以提供對特定應用程式級網路協議的更高級別訪問,例如FTP,HTTP等。

套接字是雙向通訊通道的端點。套接字可以在程序內,同一臺機器上的程序之間或不同的程序之間進行通訊。我們在python中使用socket模組來建立和使用套接字。

術語 描述
Domain 用作傳輸機制的協議族。這些值是常量,如AF_INET,PF_INET,PF_UNIX,PF_X25等。
type 兩個端點之間的通訊型別,通常是面向連線的協議的SOCK_STREAM和無連線協議的SOCK_DGRAM。
protocol 通常為零,這可以用於識別域內的協議的變體和型別。
hostname 網路介面的識別符號 ,一個字串,可以是主機名,點分四地址或冒號(可能是點)表示法中的IPV6地址,字串“”,指定INADDR_BROADCAST地址。零長度字串,指定INADDR_ANY或一個整數,按主機位元組順序解釋為二進位制地址。
port 每個伺服器偵聽在一個或多個埠上呼叫的客戶端。埠可以​​是Fixnum埠號,包含埠號的字串或服務名稱。

socket Module
要建立套接字,必須使用套接字模組中提供的socket.socket()函式,該函式具有一般語法 -

s = socket.socket (socket_family, socket_type, protocol=0)

伺服器套接字方法

  • s.bind()
    此方法將地址(主機名,埠號對)繫結到套接字。

  • s.listen()
    此方法設定並啟動TCP偵聽器。

  • s.accept()
    這被動地接受TCP客戶端連線,等待連線到達(阻塞)。

客戶端套接字方法

  • s.connect()
    此方法主動啟動TCP伺服器連線。

通用套接字方法

  • s.recv()
    此方法接收TCP訊息

  • s.send()
    該方法傳輸TCP訊息

  • s.recvfrom()
    此方法接收UDP訊息

  • s.sendto()
    該方法傳送UDP訊息

  • S.CLOSE()
    此方法關閉套接字

  • socket.gethostname()
    返回主機名。

例如
server

import socket

s = socket.socket()
host = socket.gethostname()
print(host)
port = 12345
s.bind(("127.0.0.1", port))#("host", port)

s.listen(5)
while True:
    c, addr = s.accept()
    print('Got connection from', addr)
    c.send(b'Thank you for connecting')
    c.close()

client

import socket

s = socket.socket()
host = socket.gethostname()
port = 12345

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