You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python通过Socket+Ngrok传输MP4文件仅接收部分数据的问题求助

Python通过Socket+Ngrok传输MP4文件仅接收部分数据的问题求助

各位大佬好!我最近在做一个需求:用Python的Socket在互联网上实现视频流传输,目前用Ngrok来暴露我的内网服务器。因为单独传输每一帧视频速度实在太慢,所以我先拿传输MP4文件来做测试,写了一段简化版的代码,但遇到了头疼的问题——在公网环境下,接收端收到的文件大小只有发送端原文件的一半左右,根本没法正常播放。

先贴一下我的代码:

服务器(发送端)代码

import socket

if __name__ == '__main__':
    with open('vid.mp4', 'rb') as f:
        data = f.read()

    server_soc = socket.socket()
    server_soc.bind(('localhost', 1234))
    server_soc.listen()

    client_soc, _ = server_soc.accept()
    client_soc.send(str(len(data)).rjust(16, '0').encode())
    client_soc.sendall(data)

客户端(接收端)代码

import socket

if __name__ == '__main__':
    soc = socket.socket()
    soc.connect(('6.tcp.eu.ngrok.io', 19717))

    data_len = int(soc.recv(16).decode())
    with open('new.mp4', 'wb') as f:
        read = 0
        while read < data_len:
            f.write(soc.recv(4096))
            read += 4096

我的思路是先把整个MP4文件读进内存,先发送一个固定16位长度的字符串来告知接收端文件总大小,然后用sendall把全部数据发出去。接收端先接收这16字节的长度信息,然后循环每次收4096字节,直到收够总长度的数据。但实际运行下来,接收的文件总是不完整,大小只有原文件的一半左右,本地测试的时候好像没问题,一通过Ngrok走公网就出问题了。有没有人能帮我分析下哪里出错了?

备注:内容来源于stack exchange,提问作者NoamShabat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:25:29