1. 程式人生 > >[程式碼筆記] python 之網路程式設計: 使用udp 傳送音訊檔案

[程式碼筆記] python 之網路程式設計: 使用udp 傳送音訊檔案

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