首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过tcpserver向客户端发送Mp3文件

通过tcpserver向客户端发送Mp3文件
EN

Stack Overflow用户
提问于 2021-06-03 17:02:37
回答 1查看 175关注 0票数 0

我有一个tcp客户端如下所示:

代码语言:javascript
复制
 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文件)的客户机如下所示:

代码语言:javascript
复制
 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的一个片段,例如,如果origianl文件有24秒的持续时间,我只得到前5-8。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-03 17:43:58

在客户端,您编写了stream.Read(bytes, 0, bytes.Length),这意味着每次读取数据时都重写数组

你用一个大数组来保存你的数据,如果你发送一个大文件,就会有问题。

更好的代码是这样的兄弟:

代码语言:javascript
复制
    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();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67825734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档