【问题标题】:unable to receive full file in tcp client server无法在 tcp 客户端服务器中接收完整文件
【发布时间】:2014-12-31 02:23:40
【问题描述】:

这是我用于读取 mp4 文件并发送到客户端的服务器代码

Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 3400);
sock.Bind(ep);
sock.Listen(10);
sock = sock.Accept();
FileStream fs = new FileStream(@"E:\Entertainment\Songs\Video song\song.mp4",FileMode.Open);      
BinaryReader br = new BinaryReader(fs);

byte[] data = new byte[fs.Length];
br.Read(data, 0, data.Length);
sock.Send(data);
fs.Close();
sock.Close(); 

这是客户端代码

sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3400);
sock.Connect(ep);
MemoryStream ms = new MemoryStream();             
int size = 3190551; // I know the file size is about 30 mb
int rec;
while (size > 0)
{
        byte[] buffer;
        if (size < sock.ReceiveBufferSize)
        {
            buffer = new byte[size];
        }
        else
        {
            buffer = new byte[sock.ReceiveBufferSize];
        }
        rec = sock.Receive(buffer, 0, buffer.Length, 0);
        size = size - rec;
        ms.Write(buffer, 0, buffer.Length);                
}

byte[] data = ms.ToArray();
FileStream fs = new FileStream("E:/song.mp4",FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs)
bw.Write(data);
fs.Close();
sock.Close();

**最后,我只获得了 3 到 4 mb 之间的数据....我是套接字编程的新手,我不知道问题出在哪里...无论是发送方还是接收方!!! !看起来我只是从服务器端收到了一块数据**

【问题讨论】:

  • int size = 3190551;这不是30mb!大约 3mb!

标签: c# .net sockets memorystream ftp-client


【解决方案1】:

我认为问题出在这里

int size = 3190551; // I know the file size is about 30 mb

您正在阅读的只是 3190551 字节,即 3.04mb 而不是 30mb。 尝试在消息的开头发送文件的长度,以便客户端知道它应该从服务器获取多少字节。

【讨论】:

  • 是的,它应该是 31905511 .... 我试过了,但现在它比文件大小增加了 4 到 5 mb 的垃圾,这会破坏我的文件...非常感谢您的回复
  • 尝试在消息的开头发送文件的长度,以便客户端知道它应该从服务器获取多少字节。
  • 您不应将所有缓冲区写入内存流,而应仅将接收到的字节数(rec)写入。更正这一行ms.Write(buffer, 0, buffer.Length);
猜你喜欢
  • 2023-04-03
  • 2017-02-24
  • 2019-10-01
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
相关资源
最近更新 更多