可以在两台计算机之间通过UDP发送文件

发布于 2025-02-02 16:47:48 字数 1488 浏览 1 评论 0原文

我试图发送一次文件,并由多个客户收到。我认为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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文