用socket传图片的问题

charles27823349 2009-10-13 09:10:42
67ms传一张1024*768的图片,传了几秒钟就出问题了,image.fromstream(data)出错是参数无效,查了查好像是图片的头文件没了不知道哪出的问题请高手指点

传送端: byte[] file = null;


file = def.getdata();


byte[] result = BitConverter.GetBytes(file.Length);
int aa = BitConverter.ToInt32(result, 0);

socket.Send(result);

int longer = file.Length;
int start = 0;
int mid = 0;
int count = socket.Send(file, start, longer, SocketFlags.None);
mid += count;
longer -= count;
while (longer != 0)
{
count = socket.Send(file, mid, longer, SocketFlags.None);
mid += count;
longer -= count;
}
接受端:
byte[] inum = new byte[4];

revSocket.Receive(inum);

int aa = BitConverter.ToInt32(inum, 0);
byte[] file = new byte[aa];

//revSocket.Receive(file);

int longer = file.Length;
int start = 0;
int mid = 0;
int count = revSocket.Receive(file, start, longer, SocketFlags.None);
mid += count;
longer -= count;
while (longer != 0)
{
count = revSocket.Receive(file, mid, longer, SocketFlags.None);
mid += count;
longer -= count;
}
MemoryStream ms = new MemoryStream(file);



Image image = Image.FromStream(ms);//出错行
image.Save(@"c:\aa\j"+(aa++)+".gif", ImageFormat.Gif);
...全文
116 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
charles27823349 2009-10-14
  • 打赏
  • 举报
回复
如果传送的图片小一点,能解决吗
charles27823349 2009-10-14
  • 打赏
  • 举报
回复
是不是传送的图片太大了,我可以设置图片传输的时间差,发的频率慢一些,接的频率快一些,能解决吗
charles27823349 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qs99521 的回复:]
你的缓冲区台小。不知道你1024*768的图片大小,一般应该大于1024个字节。socket每次最大发送字节为1024.你接收每次接收1024,但你的缓冲只有4,将1024字节填充到4中。所以你没接收一包数据都丢了1020的字节数据,丢数据了。
[/Quote]
图片有60k左右,如果把缓冲区设的很大也不行曾经设过10M还是出问题
BATTLERxANGE 2009-10-14
  • 打赏
  • 举报
回复
socket每次最大发送字节为1024?从何得来的数据?
qs99521 2009-10-14
  • 打赏
  • 举报
回复
你的缓冲区台小。不知道你1024*768的图片大小,一般应该大于1024个字节。socket每次最大发送字节为1024.你接收每次接收1024,但你的缓冲只有4,将1024字节填充到4中。所以你没接收一包数据都丢了1020的字节数据,丢数据了。
charles27823349 2009-10-14
  • 打赏
  • 举报
回复
我想过可能是接收缓冲区出现问题,就是一方在读一方在写,同时进行,而且缓冲区满了导致头文件被挤没了,可是既然是网络传输,应该会占用一些时间而间隔的时间是一样的接收缓冲区就应该不会满,想问一下发送有缓冲区吗,是不是这得问题呢?还有这些缓冲区有锁吗?能不能清空,请高手指点
talen_lu 2009-10-13
  • 打赏
  • 举报
回复
用tcpclient
wenbin 2009-10-13
  • 打赏
  • 举报
回复
是不是这个def.getdata();过一段时间出了问题
其它想不到什么问题。。。
wenbin 2009-10-13
  • 打赏
  • 举报
回复
不好意思,看错了,是有协议了。。
wenbin 2009-10-13
  • 打赏
  • 举报
回复
看样子是没处理边界。出现了粘包问题
做个协议。
包头:
版本
发送长度
包体:
图像转为二进制字节数组

110,499

社区成员

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

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

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