private const int iBufferSize=1048576;
static public byte[] receiveMessage = new byte[iBufferSize]; ......MemoryStream m = new MemoryStream(receiveMessage); <== 这条语句第N次执行时出现异常说什么不能读取流结尾之外的数据一开始还行的,当执行几次之后就会有问题请大侠指点
static public byte[] receiveMessage = new byte[iBufferSize]; ......MemoryStream m = new MemoryStream(receiveMessage); <== 这条语句第N次执行时出现异常说什么不能读取流结尾之外的数据一开始还行的,当执行几次之后就会有问题请大侠指点
解决方案 »
- WPF用C#显示软件正常运行时间
- c# Winfrom程序打包后可以只生成一个setup.exe文件么
- 设置导出的Excel列的单元格格式
- 如何通过 key 获得 泛型集合的 value
- web在A服务器 现在需求是把web要上传的文件保存到B服务器
- 【【amandag(高歌)】】请进来一下 有问题请教 就刚才那个ComboBox的问题
- 两个问题,麻烦了!
- 关于引用“using System.Runtime.Remoting.Channels.Tcp ;”错误求解
- 用C#写出一个导航栏的类(静态)
- 关于不同窗体间的传值问题
- 高分求一解两个不同地的数据库(也不同名)但都有一张相同的表tbl_ExamFieldInfo现在就是要比较这两张表,如果下级数据库的这个表同上级
- 如何在DataGrid(Windows Form)的表格中加入MonthCalendar控件
1、你后面的代码将由于某种当前流的位置移动了。 你检查一下。
你在读取之前,最好增加检查流位置的代码,而不是直接读取。
可以使用Position 检查流的位置 2、你创建流对像的字节数组是0长度的。 从你的代码来看,应该不是这方面的问题。
你在读取之前,最好增加检查流位置的代码,而不是直接读取。
可以使用Position 检查流的位置 2、你创建流对像的字节数组是0长度的。 从你的代码来看,应该不是这方面的问题。你最好是将代码贴出来。
static public byte[] receiveMessage = new byte[iBufferSize]; 你所有操作都针对一个字节数足receiveMessage操作,而你传给MemoryStream也是receiveMessage,
MemoryStream内部也用到了receiveMessage,
因此,问题在于:
你是否确保你针对receiveMessage的操作和MemoryStream针对receiveMessage是否同步了!!!
private const int iBufferSize=1048576;
static public byte[] receiveMessage = new byte[iBufferSize]; //定时触发,用来检测是否有数据到来,如果有,则处理掉
private void timer2_Tick(object sender, System.EventArgs e)
{
if(bIsConnected==false)return;
int iLength = 0, size, offset;
//System.Threading.Thread.Sleep(300); //to make sure all the data needed by this command is received
while(true)
{
SelectList.Add(comSock);
Socket.Select(SelectList,null,null,10);
if(SelectList.Count != 0)
{
offset=Convert.ToInt32(RemainData);
size=Convert.ToInt32(iBufferSize-RemainData);
//接收数据,并放到receiveMessage的末尾
iLength = comSock.Receive(receiveMessage,offset,size,0); RemainData += iLength;
offset += iLength;
}
else
{
break;
}
}
if(true)
{
int Mark;
if(RemainData<=0) return;
MemoryStream m = new MemoryStream(receiveMessage); // <===这放语句有问题
BinaryReader r = new BinaryReader(m);
Mark = r.ReadInt32();
switch(Mark)
{
case EXIT: break;
case SET_VIEW_POSITION:
{
double X,Y,Z;
X=r.ReadSingle();
Y=r.ReadSingle();
Z=r.ReadSingle();
SetPosition(X,Y);
}
break;
case TRAVER_PREDEF:
break;
default: break; }
//RemainData=lens-m.Position;
RemainData -= m.Position;
for(int i=0;i<RemainData;i++)
{
receiveMessage[i]=receiveMessage[i+m.Position];
}
r.Close();
m.Close();
}
SelectList.Clear();
}
}
for(int i=0;i<RemainData;i++)
{ {
receiveMessage[i]=receiveMessage[i+m.Position];
}
m.Position = 0;读取流的指针到了结尾,所以不能向下读取了。