可以在两台计算机之间通过UDP发送文件
我试图发送一次文件,并由多个客户收到。我认为UDP对此会很好。 IVE编写了以下代码,如果服务器和客户端在同一计算机上运行,我可以发送并接收文件。如果我在连接到同一网络的不同计算机中运行它们,我什么也没得到。我可以使用相同的计算机通过TCP发送数据。我该怎么做才能正确使用UDP或同时将文件发送给多个客户端?
发件人的代码
import socket
import time
SERVERADDR = (socket.gethostbyname(socket.gethostname()), 1234)
print(socket.gethostbyname(socket.gethostname()))
buffer = 2048
udpServer = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
def sendFile(filepath):
f=open(filepath,"rb")
data = f.read(buffer)
while (data):
if(udpServer.sendto(data,SERVERADDR)):
data = f.read(buffer)
time.sleep(0.0001)
f.close()
temp = input("press a button to send")
sendFile("send.jpg")
接收器的代码
import socket
buffer = 2048
SERVERIP = input("enter ip\n")
SERVERADDR = (SERVERIP, 1234)
udpServer = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udpServer.bind(SERVERADDR)
def receiveFile():
try:
udpServer.settimeout(3)
data = udpServer.recvfrom(buffer)[0]
f = open("received.jpg",'wb')
try:
while(data):
f.write(data)
udpServer.settimeout(0.2)
data = udpServer.recvfrom(buffer)[0]
except socket.timeout:
f.close()
udpServer.close()
print ("file downloaded")
except socket.timeout:
udpServer.close()
print ("no file to download")
receiveFile()
I am trying to send a file once and have it received by multiple clients. I thought udp would be good for this. Ive written the following code and if the server and the client are ran on the same computer I can send and receive the file. If I ran them in different computers connected to the same network I get nothing. I can send data through tcp with the same computers. What can I do to either use udp correctly or send a file to multiple clients at the same time?
code for sender
import socket
import time
SERVERADDR = (socket.gethostbyname(socket.gethostname()), 1234)
print(socket.gethostbyname(socket.gethostname()))
buffer = 2048
udpServer = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
def sendFile(filepath):
f=open(filepath,"rb")
data = f.read(buffer)
while (data):
if(udpServer.sendto(data,SERVERADDR)):
data = f.read(buffer)
time.sleep(0.0001)
f.close()
temp = input("press a button to send")
sendFile("send.jpg")
code for receiver
import socket
buffer = 2048
SERVERIP = input("enter ip\n")
SERVERADDR = (SERVERIP, 1234)
udpServer = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udpServer.bind(SERVERADDR)
def receiveFile():
try:
udpServer.settimeout(3)
data = udpServer.recvfrom(buffer)[0]
f = open("received.jpg",'wb')
try:
while(data):
f.write(data)
udpServer.settimeout(0.2)
data = udpServer.recvfrom(buffer)[0]
except socket.timeout:
f.close()
udpServer.close()
print ("file downloaded")
except socket.timeout:
udpServer.close()
print ("no file to download")
receiveFile()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论