socket本地模擬UDP 服務器+客戶端(三)


UDP:

TCP是建立可靠連接,並且通信雙方都可以以流的形式發送數據。相對TCP,UDP則是面向無連接的協議。

使用UDP協議時,不需要建立連接,只需要知道對方的IP地址和端口號,就可以直接發數據包。但是,能不能到達就不知道了。

雖然用UDP傳輸數據不可靠,但它的優點是和TCP比,速度快,對於不要求可靠到達的數據,就可以使用UDP協議。

 

服務端程序:

#   1 創建套接字,並綁定到當地地址 socket,bing
#  2 直接接收數據從buffer。Recvfrom(),這個函數接受到數據,和#sender的地址(主機號,端口號),當然也可以發送數據到客戶端,用#sendto(data,addr)
#   3 關閉套接字 close()
#   偽代碼:
Ss=socket()    #創建套接字
ss.bind()      #綁定
inf_loop:      #無限循環
ss.recvfrom()/sendto()  #對話
ss.close()      #關閉套接字
#我的程序:
import socket

s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('127.0.0.1',9998))
print('Bind up on 9999......')

while 1:
    data,addr = s.recvfrom(1024)
    print('Receive from %s:%s.....'%addr)           #addr為一個元組 '127.0.0.1':9999
    s.sendto(b'Hello,%s'+data,addr)                 #s.sendto(data[, flags], address)
    #或者 s.sendto(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'), addr)
    #或者 s.sendto(b'ddddddd',addr)

 

客戶端程序:

#   1 創建套接字,socket
#   2 進入循環,發送接收數據 sendto ,recvfrom
#   3 關閉套接字 close()
#   偽代碼:
Cs=socket()   #創建
Comm_loop:   #循環接收發送
Cs.sendto()/recvfrom() #對話
Cs.close()     #關閉
#我的程序:
import socket

s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

for data111 in [b'chenhang',b'wangyadan',b'wust',b'hustwb']:
    s.sendto(data111,('127.0.0.1',9998))
    print(s.recv(1024).decode('utf-8'))

s.close()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM