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 元組形式的引...