Socket传输大文件是分段传吗?

mishixiaosenlin 2011-04-22 01:34:43
是这样的,我做了一个图片传输功能,我先把图片转换为Byte数组,然后用Socket 传送,但是接收的的时候数组被分为好几段接收,这样我在接收时就不能转换出完整的图片了,还有我不知道这个图片转换成的byte是分几段传过来的,我的接收是写在while里的,不知道用什么方法组合起来。下面是我的代码,请各位大虾看看:
Socket socketHost = (Socket)socketClient;
while (true)
{
try
{
Thread.Sleep(50);
if (!socketHost.Connected)
{
socketHost.Close();
break;
}
if (isThreadQuit)
{
socketHost.Close();
break;
}

byte[] recData = new byte[10000];
int nRecCount = socketHost.Receive(recData); //读取
pictureBox1.Image = ReturnPhoto(recData); //转换为照片

Image image = ReturnPhoto(recData);
string ext = image.RawFormat.ToString();
string path = "D:\\123.jpg";
image.Save(path);


}
catch (Exception e)
{

}
}

public System.Drawing.Image ReturnPhoto(byte[] streamByte)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream(streamByte);
System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
return img;
}

现在代码只能写在while循环里面,因为写在外面根本就不执行,我这边一传输直接运行的是while里面的代码。
...全文
339 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wtj2832 2011-04-22
  • 打赏
  • 举报
回复
avi9111 2011-04-22
  • 打赏
  • 举报
回复
收到的消息肯定要包含分段编号消息,然后分段写到文件里,用System.Drawing.Image分段写应该也可以

string strHeader=1024/2048/3056;//分段编号

byte[] bytBody;
byteBody=...//你收到的Bytes

FileStream fs = new FileStream("C:\xxx.img", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
fs.Seek(long.Parse(strHeader), SeekOrigin.Begin);
fs.Write(bytBody, 0, bytBody.Length);
fs.Flush();
avi9111 2011-04-22
  • 打赏
  • 举报
回复
我每次都是传1K的,还能传更大么?
bdmh 2011-04-22
  • 打赏
  • 举报
回复
要分段,发送和接收都是一样的长度,然后到服务端组合到一起,先把总长度发过去,然后服务端可以循环等待,没接收一次,就将长度值减去一部分,直到为0,或者通过包头包尾信息来确定是否发送完整

110,538

社区成员

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

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

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