使用UDP和TCP實現簡單資料傳發

2021-10-06 02:57:12 字數 3408 閱讀 3049

tcp(傳輸控制協議)定義了兩台計算機之間進行可靠的傳輸而交換的資料和確認資訊的格式,以及計算機為了確保資料的正確到達而採取的措施。協議規定了tcp軟體怎麼識別給定的計算機上的多個目的的程序如何對分組重複這類差錯進行恢復。

協議還規定了兩台計算機如何初始化乙個tcp資料流傳輸以及如何結束這一傳輸。tcp最大的特點就是面向連線的可靠的位元組流服務

tcp的注意點:

1 服務端一般情況下都要繫結ip和埠,為了防止客戶端找不到。

2 tcp客戶端一般情況下都不繫結ip和埠,因為我們主動連線服務端,使用我們只要知道目標(服務端的ip和埠)就可以了

3 listen(128)設定的最大等待數,會將我們主動的套接字變成被動的

4 當客戶端需要連線伺服器,就用connect進行連線(分配指定的客服),udp是不需要建立連線的

5 當乙個tcp客戶端連線伺服器時,伺服器會有乙個新的套接字,這個套接字用來服務這個客戶端

6 關閉先關閉子套接字再關閉總套接字

udp使用者資料報協議是乙個簡單的面向資料報的傳輸層協議,提供的是非面向連線的、不可靠的資料流傳輸,udp不提供可靠性,也不提供報文的到達確認、排量以及流量控制等功能。它只是吧應用程式傳給ip層的資料報傳送出去,但是不能保證他們能到達目的地,因此報文可能會丟失,重複以及亂序等。但是由於udp在傳輸資料報前不用在客戶和伺服器之間建立乙個連線,且沒有超時重發等機制,故而傳輸速度很快。

from socket import

*# 定義傳送資料函式

defsend_data

(socket_udp, data, address)

:# data = '到家了'.encode('gbk')

# address = ('192.168.153.1', 8001)

socket_udp.sendto(data, address)

# 定義接收資料的函式

defaccept_data

(socket_udp)

: get_recv = socket_udp.recvfrom(

4096

)return get_recv

defrun()

:print

('請輸入想要的模式\n1:傳送資料\n2:接收資料\n'

) num =

int(

input()

)# 定義傳送模式-->udp

socket_udp = socket(af_inet, sock_dgram)

# 定義傳送/接收埠(非必須)

socket_udp.bind((''

,54123))

if num ==1:

# 傳送資料時要將資料轉換為byte格式 windows為gbk,linux為utf-8

input_data =

input

('輸入要傳遞的資料'

).encode(

'gbk'

)# 以字典的形式將ip位址和埠傳給傳送函式,ip為str格式,port為int格式

send_address =

(str

(input

('ip'))

,int

(input

('埠'))

) send_data(socket_udp, input_data, send_address)

elif num ==2:

# print(accept_data(socket_udp))

rec = accept_data(socket_udp)

# 接收到的資料為字典的格式,第乙個為資料,第二個為包含ip和埠的子字典

rec_data = rec[0]

.decode(

'gbk'

) rec_address = rec[1]

print

(rec_data)

print

(rec_address)

else

:print

('exit'

)if __name__ ==

'__main__'

: run(

)

from socket import

*# 客戶端建立連線

# 建立連線

socket_tcp_client = socket(af_inet, sock_stream)

socket_tcp_client.connect(

('192.168.153.1'

,10086))

# 傳送資料

socket_tcp_client.send(

'使用tcp傳送資料'

.encode(

'gbk'))

# 接收資料

recv_data = socket_tcp_client.recv(

1024

)print

(recv_data.decode(

'gbk'))

# print(recv_data[1])

# 關閉連線

socket_tcp_client.close(

)

from socket import

*# 1 建立伺服器套接字 tcp服務端套接字為stream

socket_tcp_server = socket(af_inet, sock_stream)

# 2 指定服務端埠

socket_tcp_server.bind(

('192.168.153.1'

,10086))

# 3 指定最大等待數

socket_tcp_server.listen(

128)

# 4 指定(生成)單獨的套接字(指定客服)

# 生成 新的套接字和請求使用者的位址

# accept---->等待傳入連線 返回新的套接字及客戶端位址

new_socket, new_address = socket_tcp_server.accept(

)print

(new_address)

# 可以檢視客戶端位址

# 5 由上一步指定的套接字服務客戶端(收發資料)

recv_data = new_socket.recv(

4096

)new_socket.send(

'伺服器已收到'

.encode(

'gbk'))

print

(recv_data.decode(

'gbk'))

# 6 結束連線,關閉套接字

new_socket.close(

)socket_tcp_server.close(

)

UDP和TCP 簡單 區別

1 雙方都是一種網路傳輸協議 2 tcp需要建立連線,而udp不需要建立連線 無連線傳輸 3 是否建立真實連線的特性,造成了雙方可靠性的差距。1 tcp屬於可靠的傳輸協議 因為傳輸前雙方建立好了連線,相當於買賣雙方建立好了交易合同,傳輸中一般不會出現意外,直到連線終止 2 udp屬於不可靠的傳輸協議...

tcp和udp使用總結

tcp tcp 是面向連線的,並且是一種可靠的協議,在基於 tcp 進行通訊時,通訊雙方需要先建立乙個 tcp 連線,建立連線需要經過三次握手,握手成功才可以進行通訊 1 基於連線的,可靠性高 2 有連線過程 3次握手過程 會有延時,實時性較差,3 傳輸相同的資料時,tcp首部開銷20位元組 udp...

TCP和UDP的簡單區別

1 tcp面向連線 如打 要先撥號建立連線 udp是無連線的,即傳送資料之前不需要建立連線 2 tcp提供可靠的服務。也就是說,通過tcp連線傳送的資料,無差錯,不丟失,不重複,且按序到達 udp盡最大努力交付,即不保證可靠交付 3 tcp通過校驗和,重傳控制,序號標識,滑動視窗 確認應答實現可靠傳...