socket发送流数据, 流没有被接收完毕? 如何检查,发送端流的长度和客户端接收的长度是否一致? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 同样期待指点另外,我采用过两种方式对待同样问题1.发送端先发送数据长度,再发送实际数据,接收端先接受长度,然后根据长度读取数据发送端 byte[] buffer = new byte[inputStream.Length]; inputStream.Position = 0; inputStream.Read(buffer, 0, buffer.Length); this.socket.Send(BitConverter.GetBytes(buffer.Length), 0, sizeof(int), SocketFlags.None); this.socket.Send(buffer, 0, buffer.Length, SocketFlags.None); 接收端 byte[] size = new byte[sizeof(int)]; this.socket.Receive(size, 0, size.Length, SocketFlags.None); byte[] buffer = new byte[BitConverter.ToInt32(size, 0)]; this.socket.Receive(buffer, 0, buffer.Length, SocketFlags.None); return new MemoryStream(buffer, 0, buffer.Length); 2.分包处理,每次发送固定长度的数据,数据的前4个字节表示数据是否传输完毕Int32 amount = 0; Byte[] head = new Byte[4]; Byte[] content = new Byte[4096]; Byte[] message = new Byte[4100]; try { while (amount < memStream.Length && stream.CanWrite) { Int32 bytes = memStream.Read(content, 0, 4096); head = BitConverter.GetBytes(bytes); head.CopyTo(message, 0); content.CopyTo(message, 4); stream.Write(message, 0, 4100); amount += bytes; } message.Initialize(); BitConverter.GetBytes(0).CopyTo(message, 0); stream.Write(message, 0, 4100);在VPN中,上面的代码还可以,不过并不稳定,时常还是会发生错误;在拨号网络中的效果就更让人不能接受了,接收到的数据常常是错乱的。 两个方法有很多相同部分,如何设计 在线等 C#怎么备份和恢复数据库(SQL SEVER 2005)? 类如何实现更新某属性后更新其它所有属性 怎样判断光标处的输入框是文本框还是密码框? 数据库 怎么从主菜单进入到子菜单里 动态table往excel读入数据的问题。 ESMTP中的验证问题 不使用存储过程,怎么做到先判断数据库表中是否有某条记录,如果有则Update,否则Inser VS.net哪里有正式版的下载呀?大侠们有没有地址呀? C#里如何判断一个字符串是否是另一个字符串的子串? 控件上的子控件发生改变时所触发的事件
inputStream.Position = 0;
inputStream.Read(buffer, 0, buffer.Length);
this.socket.Send(BitConverter.GetBytes(buffer.Length), 0, sizeof(int), SocketFlags.None);
this.socket.Send(buffer, 0, buffer.Length, SocketFlags.None); 接收端 byte[] size = new byte[sizeof(int)];
this.socket.Receive(size, 0, size.Length, SocketFlags.None);
byte[] buffer = new byte[BitConverter.ToInt32(size, 0)];
this.socket.Receive(buffer, 0, buffer.Length, SocketFlags.None);
return new MemoryStream(buffer, 0, buffer.Length); 2.分包处理,每次发送固定长度的数据,数据的前4个字节表示数据是否传输完毕Int32 amount = 0;
Byte[] head = new Byte[4];
Byte[] content = new Byte[4096];
Byte[] message = new Byte[4100];
try
{
while (amount < memStream.Length && stream.CanWrite)
{
Int32 bytes = memStream.Read(content, 0, 4096);
head = BitConverter.GetBytes(bytes);
head.CopyTo(message, 0);
content.CopyTo(message, 4);
stream.Write(message, 0, 4100);
amount += bytes;
}
message.Initialize();
BitConverter.GetBytes(0).CopyTo(message, 0);
stream.Write(message, 0, 4100);在VPN中,上面的代码还可以,不过并不稳定,时常还是会发生错误;在拨号网络中的效果就更让人不能接受了,接收到的数据常常是错乱的。