1. 程式人生 > >TCP和UDP的區別以及使用python服務端客戶端簡單編程

TCP和UDP的區別以及使用python服務端客戶端簡單編程

類型 情況 回車 退出 python spa 工作效率 效率 true

一、TCP、UDP區別總結

1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接

2、TCP提供可靠的服務,也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重復,且按序到達;UDP盡最大努力交付,即不保證可靠交付

3、UDP具有較好的實時性,工作效率比TCP高,適用於對高速傳輸和實時性較高的通信或廣播通信

4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信

5、TCP對系統資源要求較多,UDP對系統資源要求較少

二、TCP服務端以及客戶端編程

服務器端:

from socket import
* #創建流式套接字 sockfd = socket(AF_INET,SOCK_STREAM,0) #綁定IP端口 sockfd.bind((‘192.168.80.217,8888)) #設置監聽套接字,創建監聽隊列 sockfd.listen(5) while True: print("waiting for connect....") #等待客戶端鏈接 connfd,addr = sockfd.accept() # accept函數主要用於服務器端,一般位於listen函數之後,默認會阻塞進程, # 直到有一個客戶請求連接,建立好連接後,它返回的一個新的套接字connfd,
# 此後,服務器端即可使用這個新的套接字connfd與該客戶端進行通信, # 而sockfd則繼續用於監聽其他客戶端的連接請求 print("connect from",addr) while True: #收消息 data = connfd.recv(1024) if not data: break print(data.decode()) #發消息 connfd.send(來,確認下眼神.encode())
#關閉套接字 connfd.close() sockfd.close()

客戶端:

from socket import * 

#創建套接字
sockfd = socket(AF_INET,SOCK_STREAM)

#發起連接
sockfd.connect((‘192.168.80.217,8888))

while True:
    msg = input("發消息>>")
    #發送消息
    sockfd.send(msg.encode())
    if not msg:
        break

    #接收消息
    data = sockfd.recv(1024)
    print(data.decode())

#關閉
sockfd.close()

三、UDP服務端以及客戶端編程

服務器端:

from socket import * 
import sys 
from time import ctime 

#從命令行傳入IP和端口
#python3 udp_server.py 172.60.50.42 8888
if len(sys.argv) < 3:
    print(‘‘‘
           argv is error!!!
           input as 
           python3 udp_server.py 172.60.50.42 8888
           ‘‘‘)

HOST = sys.argv[1]
PORT = int(sys.argv[2])
ADDR = (HOST,PORT)
BUFFERSIZE = 1024

#創建數據報套接字
sockfd = socket(AF_INET,SOCK_DGRAM)
#綁定地址
sockfd.bind(ADDR)

#收發消息
while True:
    data,addr = sockfd.recvfrom(BUFFERSIZE)
    print(recv from %s:%s%(addr,data.decode()))
    sockfd.sendto    (("[%s] 接收到消息"%ctime()).encode(),addr)

sockfd.close()

客戶端:

from socket import * 
import sys 

#從命令行傳入IP和端口
#python3 udp_server.py 172.60.50.42 8888
if len(sys.argv) < 3:
    print(‘‘‘
           argv is error!!!
           input as 
           python3 udp_server.py 172.60.50.42 8888
           ‘‘‘)

HOST = sys.argv[1]
PORT = int(sys.argv[2])
ADDR = (HOST,PORT)
BUFFERSIZE = 1024

#創建數據報套接字
sockfd = socket(AF_INET,SOCK_DGRAM)

while True:
    data = input("消息>>")
    #直接回車退出
    if not data:
        break
    sockfd.sendto(data.encode(),ADDR)
    data,addr = sockfd.recvfrom(BUFFERSIZE)
    print(從服務器收到:,data.decode())
sockfd.close()

四、TCP和UDP編程步驟區別總結

1、創建套接字

TCP使用的是SOCK_STREAM(套接字類型:字節流),SOCK_STREAM這種的特點是面向連接的,即每次收發數據之前必須通過connect建立連接

UDP使用的是SOCK_DGRAM(套接字類型:數據包),SOCK_DGRAM這種是User Datagram Protocol協議的網絡通訊,它是無連接的,不可靠的

2、TCP服務端使用listen開啟監聽以及accept阻塞進程來等待客戶端連接,UDP是面向無連接的則不需要

3、收發消息

TCP使用的是recv()接收消息,send()發送消息

UDP使用的是recvfrom()循環接收數據,sendto()發送數據

*TCP一旦發生丟包,TCP將後續的包緩存起來,等前面的包重傳並接收到後再繼續發送,延時會越來越大

UDP對實時性要求較為嚴格的情況下,采用自定義重傳機制,能夠把丟包產生的延遲降到最低,盡量減少網絡造成的影響

TCP和UDP的區別以及使用python服務端客戶端簡單編程