[英]UDP File Transfer Python
我最近開始學習套接字編程。 我正在嘗試編寫一個 python 程序來將文件從服務器傳輸到客戶端。 我已經編寫了以下代碼。 它運行得很好......但我沒有在客戶端獲取文件(可能沒有發生傳輸)。
這是服務器端代碼:
import socket
host = "127.0.0.1"
port = 12000
buffer_size = 1024
file_name = 'Myfile.txt'
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((host,port))
sock.sendto(file_name.encode(),(host,port))
f = open(file_name, "r")
data = f.read(buffer_size)
while data:
print(data)
if(sock.sendto(data.encode(), (host, port))):
data = f.read(buffer_size)
sock.close()
f.close()
這是客戶端代碼:
import socket
host = "127.0.0.1"
port = 12000
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((host,port))
f= open('Myfile2.txt','wb')
print('New file created')
while True:
data, addr = sock.recvfrom(1024)
print(data)
while(data):
f.write(data.decode("utf-8"))
data, addr = sock.recvfrom(1024)
print('File is successfully received!!!')
f.close()
f = open('Myfile2.txt','r')
print(f.read)
f.close()
sock.close()
print('Connection closed!')
誰能幫我在我的代碼中找到問題? 提前致謝!!!
您可以對代碼進行很多改進。
首先,創建您想要接收文件的服務器,以便您可以保持它運行並僅在此處綁定端口,而不是在客戶端。 此外,您使用的 while 循環是錯誤的,因為您永遠無法擺脫它。
服務器代碼:
import socket
host = "127.0.0.1"
port = 12000
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((host,port))
f= open('Myfile2.txt','wb')
print('New file created')
data, addr = sock.recvfrom(1024)
while data:
print(data)
if data.decode("utf-8")=="Now":
break
f.write(data)
data, addr = sock.recvfrom(1024)
print('File is successfully received!!!')
f.close()
f = open('Myfile2.txt','r')
print(f.read)
f.close()
sock.close()
print('Connection closed!')
客戶端代碼:
import socket
host = "127.0.0.1"
port = 12000
buffer_size = 1024
file_name = 'Myfile.txt'
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
f = open(file_name, "r")
data = f.read(buffer_size)
while data:
print(data)
if(sock.sendto(str.encode(data), (host, port))):
data = f.read(buffer_size)
sock.sendto(str.encode("Now"),(host, port))
sock.close()
f.close()
注意:我Now
發送只是為了讓服務器知道文件已完成,您可以發送其他任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.