Python網路程式設計和多執行緒 網路程式設計基礎

2021-09-17 03:35:14 字數 2459 閱讀 6913

1.ip協議

ip位址對應的實際上是計算機的網路介面,通常是網絡卡

ip協議:負責將資料從一台計算機通過網路傳送到另一台計算機。

資料被分割成小塊,然後通過ip包傳送出去。

網際網路鏈路複雜,兩台計算機之間通常有多條線路,路由器負責決定如何把乙個ip包**出去

ipv4:32位(8*4);ipv6:128位(16*8)

2.tcp和udp協議

tcp協議:建立在ip協議之上,負責在兩台計算機之間建立可靠連線,保證資料報按順序到達。

通過握手建立連線,然後對每個ip包編號,確保對方按順序收到。如果包丟了,就自動重發。

udp協議:建立在ip協議之上,但udp協議是面向無連線的通訊協議,不保證資料報的順利到達,是不可靠傳輸,但效率比                       tcp高。

3.埠

每個網路程式都向作業系統申請唯一的埠號,這樣,兩個程序在兩台計算機之間建立網路連線就需要各自的ip位址和各自的埠號。

4.socket(套接字)

socket是網路程式設計的乙個抽象概念,用於網路通訊程式設計。

socket是tcp/ip網路最為通用的api,任何網路通訊都是通過socket來完成的

(1)socket建構函式:

socket(family,type[,protocal])

=>family:套接字家族

socket.af_unix:只能夠用於單一的unix系統程序間通訊

socket.af_inet:伺服器之間網路通訊

socket.af_inet6:ipv6

=>type:套接字型別;

socket.sock_streamo:流式socket,針對tcp

socket.sock_dgram:資料報式socket,針對udp

=>protocol:一般不填,預設為0

(2)socket物件函式

伺服器端套接字:

=>s.bind(host,port):繫結位址(host,port)到套接字,在af_inet下以元組(host,port)的形式表示位址

=>s.listen(backlog):開始tcp監聽。backlog指定在拒絕連線之前,最大的連線數量。至少為1,一般設為5即可

=>s.accept():被動接受tcp客戶端連線,(阻塞式)等待連線的到來

客戶端套接字:

=>s.connect(address):主動與tcp伺服器連線。一般address格式為元組(hostname,port),如果連線出錯,返回socket.error              錯誤 

=>s.connect_ex(address):connect()的拓展版本,出錯時返回出錯碼,而不是丟擲異常

公共用途的套接字函式:

=>s.recv(bufsize[,flag]):接收tcp資料,資料以位元組串形式返回,bufsize指定要接收的最大資料量。flag提供有關資訊的其他            資訊,通常可以忽略

=>s.send(data):傳送tcp資料,將data中的資料傳送到連線的套接字。返回值是要傳送的位元組數量,該數量可能小於data的              位元組大小

=>s.send(data):完整傳送tcp資料,將data中的資料發售那個到連線的套接字,但在返回之前會嘗試傳送所有資料。

若成功返回none,失敗則丟擲異常

=>s.recvform(bufsize[,flag]):接收udp資料,與recv()類似,但返回值是(data,address)

=>s.sendto(data,address):傳送udp資料,將資料傳送到套接字;address指定遠端位址,返回值是傳送的位元組數

=>s.close():關閉套接字

=>s.getpeername():返回連線套接字的遠端位址。返回值通常是元組(ipaddr,port)

=>s.getsockname():返回套接字自己的位址。返回值通常是乙個元組(ipaddr,port)

=>s.setsockopt(level,optname,value):設定給定套接字選項的值

=>s.getsockopt(level,optname):返回套接字選項的值

=>s.settimeout(timeout):設定套接字操作的超時時間;timeout是乙個浮點數,單位是秒;none表示沒有超時時間

一般超時時間應在剛建立套接字時設定,因為它們可能用於連線的操作

=>s.gettimeout():返回當前超時時間的值,單位是秒,如果沒有設定超時時間,則返回none

=>s.fileno():返回套接字的檔案描述符

=>s.setblocking(flag):如果flag為0,則將套接字設為非阻塞模式,否則將套接字設為阻塞模式(預設值)。

非阻塞模式下,若呼叫recv()沒有發現任何資料,或send()呼叫無法立即傳送資料,將引起socker.error異常        =>s.makefile():建立乙個與該套接字相關聯的檔案                            

Python 多執行緒網路程式設計

程式工作流程如下 coding utf 8 from socket import from time import ctime import threading 多執行緒模組 import re 正規表示式模組 host localhost port 10000 bufsize 1024 addr ...

多執行緒網路程式設計

與多程序程式設計對比 1 建立多程序相比起建立多執行緒會 消耗大量的系統資源 2 程序結束比起執行緒結束,釋放的資源也更多,子程序很快結束,系統負擔加重 3.多執行緒由於在同乙個程序中,很多資源是共用的。所以執行緒間資料共享也非常高效快捷。需要注意的兩點是 1.由於多執行緒在乙個程序中,乙個程序只有...

python 多執行緒程式設計

一 執行緒基礎 1 建立執行緒 thread模組提供了start new thread函式,用以建立執行緒。start new thread函式成功建立後還可以對其進行操作。其函式原型 start new thread function,atgs kwargs 其引數含義如下 args 元組形式的引...