以打**舉例:
import客戶端socket
#1.買手機
phone=socket.socket(socket.af_inet,socket.sock_stream)
#sock_steam=>tcp流式協議,
#2.撥號
phone.connect(('
127.0.0.1
',8080))
#3.發\收訊息
phone.send('
hello
'.encode('
utf-8
')) #
只能發bytes型別
data=phone.recv(1024)
print('
收到服務端的訊息:
',data)
#4.掛**鏈結
phone.close()
import服務端socket
#1.買手機
phone=socket.socket(socket.af_inet,socket.sock_stream) #
sock_steam=>tcp流式協議,
print(phone) #
是用來接收鏈結請求,從而建立鏈結的
#結果:
#2.插手機卡
phone.bind(('
127.0.0.1
',8080)) #
0-65535
#3.開機
phone.listen(5) #
同一時刻最大請求數為5個
print('
start....')
#4.等待**請求
conn,client_addr=phone.accept() #
(雙向鏈結的套接字物件,存放客戶端ip和埠的小元組)
print(conn) #
conn代表雙向鏈結,用來收發訊息
#結果:
(client_addr)
#結果:('127.0.0.1', 3482)
#5.收\發訊息
data=conn.recv(1024) #
1024接收的最大位元組數bytes
print('
收到客戶的資料
',data)
conn.send(data.upper())
#6.掛**鏈結
conn.close()
#7.關機
phone.close()
服務端套接字函式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() 建立乙個與該套接字相關的檔案
基於tcp協議的套接字
簡單版本 一 服務端 import socket 1 買手機 拿到套接字物件,用來鏈結建立鏈結 phone socket.socket socket.af inet,socket.sock stream tcp稱為流式協議sock stream,udp稱為資料報協議sock dgram print ...
基於TCP協議的套接字程式設計
socket是應用層與tcp ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket其實就是乙個門面模式,它把複雜的tcp ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。socket模板已經為我們封裝好了,我...
基於TCP協議的套接字程式設計
基於socket通訊的內部演算法,當傳送的訊息為空的時候,接收端不會收到訊息,而傳送端向下執行到recv,兩端出於僵持狀態。所以在傳送端需要有個判斷,如果傳送的為空,則重新輸入傳送內容。socket是應用層與tcp ip協議通訊的中間軟體抽象層,它是一組介面。import socket 買手機 ph...