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()