學習筆記-網路基礎2
阿新 • • 發佈:2018-12-13
DUP在python中的連線
配置客戶端
c/s構架中其實客戶端用python來實現簡單的摳腳
客戶端需要進行向服務端進行傳送訊息,客戶端需要進行接收訊息,此時客戶端就模擬出了一個服務端,所以這裡進行客戶端的演示
from socket import *
# 建立客戶端物件,並傳入引數第一個是指的ipv4協議,第二個是指的udp協議
client = socket(AF_INET, SOCK_DGRAM)
# 傳送訊息
client.sendto("1:525:匿名:匿名:32:內容".encode('gb2312'),('172.16.17.16',8080))
傳送訊息的裡面的字串實際上是要符合某個其他程式的標準
配置服務端
from socket import *
# 建立物件 第一個是ipv4協議 第二個是udp協議
server = socket(AF_INET, SOCK_DGRAM)
# 把配置告知核心不寫就是本機,第二個還是埠
server.bind(('192.168.1.102', 8888))
# 設定等待資料,並且接受資料量
data, address = server.recvfrom(1024) # 設定每次拿的多少
print(data.decode('gb2312'))
使用recevfrom進行接收的時候,1024只是限定接收的長度
bind裡面直接放地址和埠,需要注意這裡是元組
實現同時客戶端和服務端的配置
使用多執行緒處理,通過多執行緒實現伺服器功能和客戶端功能
import threading
from socket import *
def servers(): # 模擬伺服器
while True:
# 服務端 獲取資料列印資料
data, address = talk.recvfrom(1024) # 限定每次獲取的字元長度
# 對資料進行處理
print("\r<<{}\n>>".format(data.decode('gb2312')), end= '')
def clients(): # 模擬客戶端
while True:
# ip = ('172.16.17.16',8080) # 測試用ip
data = input('>>')
talk.sendto(data.encode('gb2312'),configs)
if __name__ == '__main__':
# 建立兩個執行緒
t1 = threading.Thread(target=servers)
t2 = threading.Thread(target=clients)
# 由於要連線網路,需要先例項化物件 引數對應的是ipv4 和 udp協議
talk = socket(AF_INET, SOCK_DGRAM)
# 準備好連線的地址和埠
configs = ('172.16.17.16',8081)
# 必須啟動執行緒
# 伺服器必須掛起
talk.bind(configs)
t1.start()
t2.start()
當測試的時候由於都繫結的同一個埠,則傳送的時候是傳送給自己
模擬兩個人進行聊天的軟體,對方既能接收也能傳送,其實對方也就相當於一個伺服器和一個客戶端,你傳送的地址是他模擬的伺服器地址,他傳送的地址是你伺服器的地址