[程式碼筆記] python 之網路程式設計: 使用udp 傳送音訊檔案
阿新 • • 發佈:2019-02-07
使用udp傳送一個可執行的jar檔案
服務端:
#!python
#檔名: demo_server.py
'''
規定:
伺服器接受客戶端請求,得知要傳送檔案了(實際就得知該傳送哪個)
向其傳送檔案,然後不停的傳送(大檔案分段傳送),此處我還要接受客戶端的接受成功訊息
'''
import socket
BUF_SIZE = 1024
server_addr = ('127.0.0.1',8888)
#socket的型別是socket.SOCK_DGRAM(udp使用的)
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#服務端照例繫結地址
server.bind(server_addr)
#迴圈接受客戶端傳送資料,並將資料發回
count=0
flag=1
f=open('tank.jar','rb')
while True:
if count==0:
print ("Are You Ready?")
data,client_addr = server.recvfrom(BUF_SIZE)
print ('來自',client_addr,' 的資料是: ',data.decode('utf-8'))
data=f.read(BUF_SIZE)
if str(data)!="b''" :
server.sendto(data,client_addr)
print(data)#此處列印注意被刷屏,僅測試用
else:
server.sendto('end'.encode('utf-8'),client_addr)#此處為檔案結束,傳送結束通知給客戶端
break
data,client_addr = server.recvfrom(BUF_SIZE)
print ('接受自 ',client_addr,' 收到資料為 : ',data.decode('utf-8'))
count+=1
print('迴圈了'+str(count))
server.close()
客戶端:
#!python
#檔名: demo_client.py
'''
規定:
客戶端向服務端請求檔案(音訊或者視屏等完整性要求不高的)
先打個招呼,要檔案了(實際可以為要哪個檔案)
然後開始接受檔案,不停的接受即可(這裡我每接受一次就回復一句ok))
'''
import socket
import struct
BUF_SIZE = 1024
server_addr = ('127.0.0.1',8888)
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
count=0;
#不停的傳送資料 ,沒發一次嘗試接受一次資料並列印
f=open('tmp/file_copy.jar','wb')
while True:
if count==0:
data='Yes,I\'m Ready'
client.sendto(data.encode('utf-8'),server_addr)
data,addr = client.recvfrom(BUF_SIZE)
if str(data)!="b'end'":
f.write(data)
print(data)#此處列印注意被刷屏,僅測試用
else:
break;#接受到結束通知,結束迴圈,列印迴圈次數,然後去指定路徑查詢file_copy.jar嘗試執行
client.sendto('ok'.encode('utf-8'),addr)#向服務端傳送成功通知
count+=1;
print('迴圈了'+str(count))
f.close()
client.close()