您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“python如何實現(xiàn)套接字創(chuàng)建”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“python如何實現(xiàn)套接字創(chuàng)建”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
TCP / IP 是設備用于在 Internet 和大多數(shù)本地網(wǎng)絡上進行通信的一組協(xié)議。 TCP 更可靠,具有大量錯誤檢查并需要更多資源。 HTTP,SMTP 或 FTP 等服務使用它。 UDP 的可靠性要差得多,錯誤檢查的能力也有限,所需資源也更少。 VoIP 等服務使用它。
socket.SOCK_STREAM用于為 TCP 創(chuàng)建套接字,而socket.SOCK_DGRAM為 UDP 創(chuàng)建套接字。
創(chuàng)建套接字時,必須指定其地址族,在套接字中使用該類型。
AF_UNIX,AF_LOCAL-本地通訊
AF_INET-IPv4 Internet 協(xié)議
AF_INET6-IPv6 Internet 協(xié)議
AF_IPX-IPX-Novell 協(xié)議
AF_BLUETOOTH-無線藍牙協(xié)議
AF_PACKET-底層數(shù)據(jù)包接口
對于AF_INET地址族,指定了一對(主機,端口)。 host是一個字符串,表示互聯(lián)網(wǎng)域表示法中的主機名(如example.com)或 IPv4 地址(如93.184.216.34),并且 port 是整數(shù)。
import socket ip = socket.gethostbyname("geek-docs.com") print(ip)
TCP ipv4 import socket # 創(chuàng)建用于IPV4的TCP套接字 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: # 工作時間服務器的主機名和端口 host = "time.nist.gov" port = 13 # 連接到遠程套接字 s.connect((host, port)) # 將數(shù)據(jù)發(fā)送到套接字。套接字必須連接到遠程套接字。從字節(jié)發(fā)送數(shù)據(jù),直到發(fā)送完所有數(shù)據(jù)或發(fā)生錯誤為止 s.sendall(b'') print(str(s.recv(4096), 'utf-8')) # HEAD請求:HEAD 請求是沒有消息正文的 GET 請求。 請求/響應的標頭包含元數(shù)據(jù),例如 HTTP 協(xié)議版本或內(nèi)容類型。 import socket with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect(("webcode.me", 80)) s.sendall(b"HEAD / HTTP/1.1\r\nHost: webcode.me\r\nAccept: text/html\r\n\r\n") print(str(s.recv(1024), 'utf-8')) #GET 請求:請求指定資源的表示形式。 使用 GET 的請求應僅檢索數(shù)據(jù) import socket with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect(("webcode.me", 80)) # 對于 HTTP 1.1 協(xié)議,默認情況下,連接可以是持久的。 這就是為什么我們發(fā)送Connection: close標頭的原因。 s.sendall(b"GET / HTTP/1.1\r\nHost: webcode.me\r\nAccept: text/html\r\nConnection: close\r\n\r\n") 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如何實現(xiàn)套接字創(chuàng)建”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。