【问题标题】:Sending and receiving files over TCP connection between server and client通过服务器和客户端之间的 TCP 连接发送和接收文件
【发布时间】:2016-09-03 03:28:26
【问题描述】:

首先,我对这个话题很陌生,所以我在互联网上搜索了一下,发现了一些关于 TCP 和套接字连接的东西。我的智能手机上有一个用作服务器的应用程序和一个用作客户端的 WinForms 应用程序。现在我在我的应用程序中尝试了这个:

s.SendFile(outputFile);

其中 outputfile 是 mp3 格式的音频文件,s 是 Socket。

在客户端我有一个 TCP 连接:

 using (var stream = client.TcpClnt.GetStream())
                using (var output = File.Create(Path.Combine(Directory.GetCurrentDirectory(), "Audio.mp3")))
                {
                    // read the file in chunks of 1KB
                    var buffer = new byte[1024];
                    int bytesRead;
                    while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        output.Write(buffer, 0, bytesRead);
                    }
                }

最后,我只收到一个 23kb 大且无法打开的音频文件。我在这里做错了什么?

编辑:

我也试过了

 Socket socket = TcpClnt.Client;

然后

 while ((bytesRead = socket.Receive(buffer, 0, buffer.Length, SocketFlags.None)) > 0)

文件仍有 23kb(也许这没问题。我不知道)但文件总是损坏,无法被媒体播放器打开。

【问题讨论】:

  • 在 while 循环之后尝试了 output.Close() 但这没有帮助

标签: c# tcp xamarin server client


【解决方案1】:

将此用于音频文件:

Stream output = new StreamWriter(outputfilename,true)
Mp3FileReader reader = new Mp3FileReader(file);
Mp3Frame frame;
while ((frame = reader.ReadNextFrame()) != null)
{
output.Write(frame.RawData, 0, frame.RawData.Length);
}

【讨论】:

  • 这是NAudio 对吧?如果可能的话,我最好在没有第三方库的情况下这样做
  • 你的写文件代码是正确的,确保你有“s.SendFile(outputFile);”这将创建或发送正确的对象。
  • 是的,我有。还是打不开文件。
猜你喜欢
  • 2023-04-03
  • 2015-01-19
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
  • 2013-10-02
  • 2017-05-01
  • 2016-04-10
  • 1970-01-01
相关资源
最近更新 更多