c# - 通过 tcpserver 向客户端发送 Mp3 文件
问题描述
我有一个如下的 tcp 客户端:
public static void RunStream()
{
Console.WriteLine("Starting Stream...");
TcpListener listen = new TcpListener(IPAddress.Parse("127.0.0.1"), 13000);
listen.Start();
while (true)
{
Console.Write("Waiting for a connection... ");
Socket socket = listen.AcceptSocket();
if (socket.Connected)
{
SendFile(socket);
socket.Disconnect(false);
}
}
}
public static void SendFile(Socket socket)
{
NetworkStream netstream = new NetworkStream(socket);
StreamWriter writer = new StreamWriter(netstream);
FileStream fileStream = File.Open("file_example_MP3_700KB.mp3", FileMode.Open, FileAccess.Read, FileShare.Read);
fileStream.CopyTo(netstream);
netstream.Flush();
netstream.Close();
}
static void Main(string[] args)
{
RunStream();
}
以及从服务器读取和保存流(包含 mp3 文件)的客户端,如下所示:
static void Main(string[] args)
{
TcpClient client = new TcpClient("127.0.0.1", 13000);
byte[] bytes = new byte[2100000];
var stream = client.GetStream();
int i;
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
stream.Write(bytes, 0, i);
}
File.WriteAllBytes("test.mp3", bytes);
stream.Flush();
client.Close();
}
问题是我只得到了原始 mp3 的片段,例如,如果原始文件的持续时间为 24 秒,我只得到前 5-8
解决方案
兄弟在客户端你写stream.Read(bytes, 0, bytes.Length)
这意味着你每次读取数据时都重写数组
,你使用一个大数组来保存你的数据,如果你发送一个大文件,这将使问题
成为更好的代码,像这样的兄弟:
static void Main(string[] args)
{
TcpClient client = new TcpClient("127.0.0.1", 13000);
var stream = client.GetStream();
byte[] buff = new byte[1024]; //you can change length later, bigger arrays have more reading speed but give more ram
FileStream filestream = new FileStream("test.mp3", FileMode.Create);
while (stream.Length > stream.Position)
{
int readLength = stream.Read(buff, 0, buff.Length);
filestream.Write(buff, 0, readLength);
}
stream.Flush();
client.Close();
}
推荐阅读
- typescript - ng2-charts 和注解插件:数据更新后注解不可见
- python - 具有二维 numpy 数组索引的 pandas 数据帧的有效子集
- json - 10.0.2.2 在我的 Android 模拟器中运行,但在我的 Flutter 物理设备中运行
- zabbix - 使用 Zabbix 监控软件在 Qlik Sense Server Tasks 失败时发送电子邮件警报
- c++ - C ++用只有两个零替换数组中的偶数个零
- reactjs - 当输入值更改时,如何更新嵌套数组中的对象?
- wordpress - 错误:更改域 GCP + openLiteSpeed 后“无法访问此站点”
- c++ - c ++嵌套类getter和setter不起作用
- python - 基于部分子串匹配合并数据帧
- ios - 如何在iOS中电话号码的数字之间放置自定义空格?