首頁 > 軟體

python實現通訊端建立

2022-05-25 22:00:22

1、網路協定
  

TCP / IP 是裝置用於在 Internet 和大多數本地網路上進行通訊的一組協定。 TCP 更可靠,具有大量錯誤檢查並需要更多資源。 HTTP,SMTP 或 FTP 等服務使用它。 UDP 的可靠性要差得多,錯誤檢查的能力也有限,所需資源也更少。 VoIP 等服務使用它。

socket.SOCK_STREAM用於為 TCP 建立通訊端,而socket.SOCK_DGRAM為 UDP 建立通訊端。

2、地址族
  

建立通訊端時,必須指定其地址族,在通訊端中使用該型別。

AF_UNIX,AF_LOCAL-本地通訊

AF_INET-IPv4 Internet 協定

AF_INET6-IPv6 Internet 協定

AF_IPX-IPX-Novell 協定

AF_BLUETOOTH-無線藍芽協定

AF_PACKET-底層封包介面

對於AF_INET​地址族,指定了一對(主機,埠)。 host​是一個字串,表示網際網路域表示法中的主機名(如example.com​)或 IPv4 地址(如93.184.216.34),並且 port 是整數。

3、通過域名獲取IP地址

import socket
ip = socket.gethostbyname("geek-docs.com")
print(ip)

4、socket

TCP ipv4
import socket
# 建立用於IPV4的TCP通訊端
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    # 工作時間伺服器的主機名和埠
    host = "time.nist.gov"
    port = 13
    # 連線到遠端通訊端
    s.connect((host, port))
    # 將資料傳送到通訊端。通訊端必須連線到遠端通訊端。從位元組傳送資料,直到傳送完所有資料或發生錯誤為止
    s.sendall(b'')
    print(str(s.recv(4096), 'utf-8'))
# HEAD請求:HEAD 請求是沒有訊息正文的 GET 請求。 請求/響應的檔頭包含後設資料,例如 HTTP 協定版本或內容型別。
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect(("webcode.me", 80))
    s.sendall(b"HEAD / HTTP/1.1rnHost: webcode.mernAccept: text/htmlrnrn")
    print(str(s.recv(1024), 'utf-8'))
#GET 請求:請求指定資源的表示形式。 使用 GET 的請求應僅檢索資料
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect(("webcode.me", 80))
    # 對於 HTTP 1.1 協定,預設情況下,連線可以是持久的。 這就是為什麼我們傳送Connection: close檔頭的原因。
    s.sendall(b"GET / HTTP/1.1rnHost: webcode.mernAccept: text/htmlrnConnection: closernrn")
    while True:
        data = s.recv(1024)
        if not data:
            break
        print(data.decode())
#回顯使用者端伺服器範例
import socket
import time
with socket.socket() as s:
    host = 'localhost'
    port = 8001
    s.bind((host, port))
    print(f'socket binded to {port}')
    s.listen()
    con, addr = s.accept()
    with con:
        while True:
            data = con.recv(1024)
            if not data:
                break
            con.sendall(data)
#非同步伺服器
import asyncio
async def handle_client(reader, writer):
    data = (await reader.read(1024))
    writer.write(data)
    writer.close()
loop = asyncio.get_event_loop()
loop.create_task(asyncio.start_server(handle_client, 'localhost', 8001))
loop.run_forever()

以上就是python通訊端建立的詳細內容,更多關於python通訊端的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com