簡體   English   中英

UDP 文件傳輸 Python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM