socket套接字程式設計(一)

2021-10-03 00:23:23 字數 4556 閱讀 2290

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...