udp套接字程式設計
總結(tcp套接字和udp套接字程式設計區別)
補充(socket模組方法和socket套接字屬性)
套接字:實現網路程式設計進行資料傳輸的一種技術手段
python實現套接字程式設計:import socket
套接字分類:
socket表示建立乙個套接字(買了乙個**)
bind用於繫結主機ip位址等資訊(好比辦了一張**卡)
listen設定監聽,可以被其他套接字或程式連線的功能(充話費)
accept處於等待狀態(讓**處於待機狀態)
send/recv傳送/接收(用**)
close銷毀套接字(把**摔了)
建立套接字
sockfd=socket.socket(socket_family=af_inet,socket_type=sock_stream,proto=0)功能:建立套接字
引數:socket_family 網路位址型別 :af_inet表示ipv4(預設值)、af_inet6表示ipv6
socket_type 套接字型別: sock_stream表示流式(預設值)、sock_dgram表示資料報
proto 通常為0 ,選擇子協議(一般用不上)
返回值:套接字物件
繫結位址
sockfd.bind(addr)設定監聽
sockfd.listen(n)功能:將套接字設定為監聽套接字,確定監聽佇列的大小
引數:監聽佇列大小(linux下固定的)
等待處理客戶端連線請求
connfd, addr = sockfd.accept()訊息收發
data = connfd.recv(buffersize)功能:接收客戶端訊息
引數:每次最多接收訊息的大小(單位:位元組)
返回值:接收到的內容
n = connfd.send(data)功能:傳送訊息
引數:要傳送的內容,bytes格式(位元組串)
返回值:傳送的位元組數
關閉套接字
connfd.close()功能:關閉套接字sockfd.close()
重點**:
'''
tcp 套接字服務端重點**
'''import socket
# 建立流式套接字
sockfd=socket.socket(socket.af_inet, socket.sock_stream)
# 繫結本機位址
sockfd.bind(
('0.0.0.0'
,8888))
# 設定監聽
sockfd.listen(5)
# 等待客戶端連線
print
('waiting for connect...'
)connfd, addr = sockfd.accept(
)# 收發訊息
data = connfd.recv(
1024
)print
('接收到的訊息: '
, data.decode())
n = connfd.send(b'receive your message'
)# 注意傳送位元組串,也可以encode
print
('傳送了%d個位元組資料'
% n)
# 關閉套接字
connfd.close(
)sockfd.close(
)
建立套接字
注意:只有相同型別的套接字才能進行通訊
請求連線
sockfd.connect(server_addr)收發資訊
注意:防止兩端都阻塞,recv send要配合(一收一發,或者一發一收)
關閉套接字
重點**:
from socket import
*# 建立tcp套接字
sockfd = socket(
)#此處如果是import socket方式,就和上述
# 發起連線
server_addr =
('***.***.***.***'
,8888
)# 服務端的網路位址
sockfd.connect(server_addr)
# 收發訊息
sockfd.send(
'來自客戶端的訊息'
.encode())
data = sockfd.recv(
1024
)print
('from server:'
, data.decode())
# 關閉
sockfd.close(
)
網路緩衝區有效協調了訊息的收發速度
send和recv實際是向緩衝區傳送接收訊息,當緩衝區不為空recv就不會阻塞。
建立資料報套接字
sockfd = socket(af_inet, sock_dgram)繫結位址
sockfd.bind(addr)訊息收發
data, addr = sockfd.recvfrom(buffersize)
n=sockfd.sendto(data,addr)關閉套接字
sockfd.close()重點**:
'''
udp 套接字服務端重點**
'''from socket import
*# 建立資料報套接字
sockfd = socket(af_inet, sock_dgram)
# 繫結位址
server_addr =
('0.0.0.0'
,8888
)sockfd.bind(server_addr)
# 收發訊息
while
true
: data, addr = sockfd.recvfrom(
1024
)print
("收到的訊息:"
,data.decode())
sockfd.sendto(b'thanks'
,addr)
# 關閉套接字
sockfd.close(
)
建立套接字
收發訊息
關閉套接字
重點**
'''
udp 套接字客戶端重點**
'''from socket import
*# 伺服器位址
host =
'127.0.0.1'
port =
8888
addr =
(host, port)
# 建立套接字
sockfd = socket(af_inet, sock_dgram)
# 收發訊息
while
true
: data =
input
('msg>>')if
not data:
break
sockfd.sendto(data.encode(
), addr)
msg, addr = sockfd.recvfrom(
1024
)print
('from server:'
, msg.decode())
sockfd.close(
)
流式套接字是以位元組流方式傳輸資料,資料報套接字是以資料報形式傳輸
tcp套接字會有粘包,udp套接字有訊息邊界不會粘包
tcp套接字保證訊息的完整性,udp則不能
tcp套接字依賴listen accept建立連線才能收發訊息,udp套接字不需要
tcp套接字使用send,recv收發訊息,udp套接字使用sendto,recvfrom
此部分了解即可
部分socket模組方法(socket.方法名)
套接字屬性
網路程式設計 Socket 套接字
網路程式設計 目前較為流行的網路程式設計模型是客戶機 伺服器 c s 結構。即通訊雙方一方作為服務 器等待客戶提出請求並予以響應。客戶則在需要服務時向伺服器提出申請。伺服器一般作為 守護程序始終執行,監聽網路埠,一旦有客戶請求,就會啟動乙個服務程序來響應該客 戶,同時自己繼續監聽服務埠,使後來的客戶...
socket套接字程式設計函式
呼叫socket函式建立套接字 呼叫bind函式分配ip位址和埠 呼叫listen函式轉為可接收請求狀態 呼叫accept函式受理連線請求 include 成功時返回檔案描述符,失敗時返回 1 int socket int domain,int type,int protocol 協議族 proto...
網路程式設計socket套接字
socket 建立乙個socket,主動套介面。bind 繫結ip和埠號到socket,需先配置ip 埠號。connect 客戶機 client 端和伺服器傳送請求建立連線。listen 伺服器 serv 監聽client傳送的請求。accept 完成連線,阻塞響應。sendto 傳送資料 recv...