1、建立服務端的socket以便開始通訊。
2、綁定ip以及端口号,這樣用戶端才能找到這個程式。
3、因為本地網卡不止一個是以盡量不寫死,一般用""空來表示所有本地網卡。
4、接下來開始通過綁定的ip以及端口開始監聽消息,設定最大接收1024位元組消息,以防檔案過大,占滿網絡緩存區。
5、收到消息之後,這時候就收到了用戶端發送過來的ip以及端口,然後也可以再通過這個ip以及端口回發消息。
6、收到消息的時候,先确定用戶端的編碼形式是utf-8還是gbk,并且用同樣的方式把位元組碼解碼成能看懂的資料。
7、在進行回發的時候,要首先對要發送的資料進行編碼,轉換成對應的位元組碼發送。
8、最後一步就是關閉服務端,一般不做關閉,關閉軟體即關閉服務端。
9、在用線程,程序,程序池的時候可實作消息收發的并行,協程的時候可實作僞并行,原理就是方法之間切換。
10、協程可使用封裝好的架構,greenlet以及gevent架構來操作。
11、在服務端循環進行消息阻塞(接收消息)的時候,這裡跟tcp不同,不需要每次使用時重用或者是釋放所綁定端口。
12、tcp在四次揮手以後還要等待用戶端一分鐘左右才會釋放端口,udp屬于突發通訊,來即收,揮即去。
13、是以在這裡并不需要立馬再次重用這個端口。
from socket import *
# 服務端
# 建立服務端socket
socket_serve = socket(AF_INET, SOCK_DGRAM)
# 确定本地端口,可能多個,是以不限
local_port = ('', 8989)
# 綁定本地端口
socket_serve.bind(local_port)
while True:
# 本地端口監聽用戶端資料(接收資料)
socket_temp_serve_data = socket_serve.recvfrom(1024)
# 資料解碼
socket_serve_data = socket_temp_serve_data[0].decode('gbk')
# 列印接受到的資料
print(socket_serve_data)
# 使用者輸入資料并對用戶端發送
socket_serve_sendto_temp_data = input('服務端:')
#對使用者輸入的資料進行編碼
socket_serve_sendto_temp_data = '服務端:' + socket_serve_sendto_temp_data
socket_serve_sendto_data = socket_serve_sendto_temp_data.encode('gbk')
# 傳輸資料給用戶端
socket_serve.sendto(socket_serve_sendto_data, socket_temp_serve_data[1])
# 關閉socket服務端
# socket_serve.close()