socket文件传输问题,高手帮忙看看

超越大大 2005-12-13 09:54:52
我用filestream读写文件,用networkstream发送接收文件,为何接收到的文件和原文件大小不一致呢?而且有时会显示接收到的文件已损坏,这会是什么原因造成的呢?
...全文
351 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
超越大大 2005-12-15
  • 打赏
  • 举报
回复
ding
超越大大 2005-12-14
  • 打赏
  • 举报
回复
各位老大能说明白点吗?
超越大大 2005-12-14
  • 打赏
  • 举报
回复
自己顶
coley 2005-12-13
  • 打赏
  • 举报
回复
mark
cdpath 2005-12-13
  • 打赏
  • 举报
回复
缓冲的问题
zhao606 2005-12-13
  • 打赏
  • 举报
回复
传输大小是有默认的吧!
超越大大 2005-12-13
  • 打赏
  • 举报
回复
晕,没人知道?
超越大大 2005-12-13
  • 打赏
  • 举报
回复
//发送文件
private void sendBinary(ref Socket socket, string filePath)
{
try
{
long readcount = fi.Length / 10240;
long byteremain = fi.Length % 10240;
byte[] bb = new byte[10240];
int number;
stream = new NetworkStream(socket);
for (long count1 = 1; count1 <= readcount; count1++)
{
number = filestream.Read(bb, 0, bb.Length);
stream.Write(bb, 0, bb.Length);
stream.Flush();
bb = new byte[10240];
}
if (byteremain != 0)
{
bb = new byte[byteremain];
filestream.Read(bb, 0, bb.Length);
stream.Write(bb, 0, bb.Length);
stream.Flush();
}
filestream.Close();
stream.Close();
richTextBox1.AppendText("文件发送完毕" + "\r\n");
toolStripStatusLabel1.Text = "就绪";
}
catch (Exception f)
{
MessageBox.Show(f.ToString(), "sendbinary errer");
}
//接收文件
private void getBinary(ref Socket socket, string filePath)
{
try
{
filestream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);
byte[] bb = new byte[10240];
NetworkStream netStream = new NetworkStream(socket);
long readnumber;
long currentread = 0;
long readcount = Convert.ToInt64(str[1]) / 10240;
long byteremain = Convert.ToInt64(str[1]) % 10240;
while ((readnumber = netStream.Read(bb, 0, bb.Length)) > 0 && currentread != readcount)
{
currentread++;
filestream.Write(bb, 0, bb.Length);
filestream.Flush();
if (currentread == readcount)
{
if (byteremain != 0)
{
bb = new byte[byteremain];
netStream.Read(bb, 0, bb.Length);
filestream.Write(bb, 0, bb.Length);
filestream.Flush();
}
break;
}
}
filestream.Close();
netStream.Close();
richTextBox1.AppendText("接收文件成功\r\n");
filesend = false;

}
catch (Exception f)
{
richTextBox1.AppendText("接收文件时错误" + f.ToString() + "\r\n");
}
}
c11_11_11 2005-12-13
  • 打赏
  • 举报
回复
fen
yuanreid 2005-12-13
  • 打赏
  • 举报
回复
yybb520 2005-12-13
  • 打赏
  • 举报
回复
我想是读了固定的长度了,每一次读了固定的长度,那么就可能导致你双方的文件不一至,最后总得有校验吧?
malongning 2005-12-13
  • 打赏
  • 举报
回复
看一下你的接收程序和发送程序能否对应,把原代码帖出来给你看
linanwang 2005-12-13
  • 打赏
  • 举报
回复
你什么都不贴,帮你看什么?
超越大大 2005-12-13
  • 打赏
  • 举报
回复
我对文件长度进行了判断,读的不是固定长度字节,而且不是每次传送文件的时候都有问题,是传送大文件时有时会出错
stonegoldaustin 2005-12-13
  • 打赏
  • 举报
回复
非常明显,你传送的数据不正确,
比如,对文件长度没有判断,每次都读固定长度的字节,那么最后一次就有可能多传了数据
超越大大 2005-12-13
  • 打赏
  • 举报
回复
csdn里没人知道吗?

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧