日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python之socket

發布時間:2023/12/13 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python之socket 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

socket套接字

什么叫socket

socket是處于應用層與傳輸層之間的抽象層,他是一組操作起來非常簡單的接口(接受數據)此接口接受數據之后,交由操作系統.socket在python中就是一個模塊.

socket兩個分類

基于文件類型的套接字家族

套接字家族的名字:AF_UNIX

unix一切皆文件,基于文件的套接字調用的就是底層的文件系統來取數據,兩個套接字進程運行在同一機器,可以通過訪問同一個文件系統間接完成通信

基于網絡類型的套接字家族

套接字家族的名字:AF_INET

(還有AF_INET6被用于ipv6,還有一些其他的地址家族,不過,他們要么是只用于某個平臺,要么就是已經被廢棄,或者是很少被使用,或者是根本沒有實現,所有地址家族中,AF_INET是使用最廣泛的一個,python支持很多種地址家族,但是由于我們只關心網絡編程,所以大部分時候我么只使用AF_INET)

為什么存在socket抽象層?

如果直接與操作系統數據交互非常麻煩,繁瑣,socket對這些繁瑣的的操作高度的封裝,簡化.

socket模塊函數用法

import socket socket.socket(socket_family,socket_type,protocal=0)socket_family 可以是 AF_UNIX 或 AF_INET。socket_type 可以是 SOCK_STREAM 或 SOCK_DGRAM。protocol 一般不填,默認值為 0。獲取tcp/ip套接字 tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)獲取udp/ip套接字 udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)由于 socket 模塊中有太多的屬性。我們在這里破例使用了'from module import *'語句。使用 'from socket import *',我們就把 socket 模塊里的所有屬性都帶到我們的命名空間里了,這樣能 大幅減短我們的代碼。 例如tcpSock = socket(AF_INET, SOCK_STREAM) 服務端套接字函數 s.bind() 綁定(主機,端口號)到套接字 s.listen() 開始TCP監聽 s.accept() 被動接受TCP客戶的連接,(阻塞式)等待連接的到來客戶端套接字函數 s.connect() 主動初始化TCP服務器連接 s.connect_ex() connect()函數的擴展版本,出錯時返回出錯碼,而不是拋出異常公共用途的套接字函數 s.recv() 接收TCP數據 s.send() 發送TCP數據(send在待發送數據量大于己端緩存區剩余空間時,數據丟失,不會發完) s.sendall() 發送完整的TCP數據(本質就是循環調用send,sendall在待發送數據量大于己端緩存區剩余空間時,數據不丟失,循環調用send直到發完) s.recvfrom() 接收UDP數據 s.sendto() 發送UDP數據 s.getpeername() 連接到當前套接字的遠端的地址 s.getsockname() 當前套接字的地址 s.getsockopt() 返回指定套接字的參數 s.setsockopt() 設置指定套接字的參數 s.close() 關閉套接字面向鎖的套接字方法 s.setblocking() 設置套接字的阻塞與非阻塞模式 s.settimeout() 設置阻塞套接字操作的超時時間 s.gettimeout() 得到阻塞套接字操作的超時時間面向文件的套接字的函數 s.fileno() 套接字的文件描述符 s.makefile() 創建一個與該套接字相關的文件

簡單的socket通信實現

server

import socket# 買電話 phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 默認基于TCP協議的socket# 綁定電話卡 phone.bind(('192.168.14.198',8848)) # 綁定IP地址和端口# 開機監聽 phone.listen(5) print(111)# 等待連接 conn, addr = phone.accept() # 阻塞 print(conn,addr)from_client_data = conn.recv(1024) # 至多接受1024個字節 阻塞 print(f'來自客戶端{addr[0]}的消息:{from_client_data.decode("utf-8")}')to_client_data = input('>>>') conn.send(to_client_data.encode('utf-8')) conn.close() phone.close()

client

import socket# 買電話 phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 默認基于TCP協議的socket# 撥號打電話 phone.connect(('127.0.0.1',8848)) data = input('請輸入>>>')phone.send(data.encode('utf-8')) from_server_data = phone.recv(1024) print(f'來自服務端的消息:{from_server_data}')# 關閉電話 phone.close()

轉載于:https://www.cnblogs.com/lifangzheng/p/11358458.html

總結

以上是生活随笔為你收集整理的python之socket的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。