由于SGIP采用IP认证,所以我只能先连接到服务器,然后由服务器转发,结果郁闷的事情发生了。昨天我直接连接网关是可以接收到数据的,虽然告诉我认证失败,但是今天却总是不能接收到数据,而用 microsft网络监视器却发现有数据返回。

我原来的代码:

SFTcp t=new SFTcp();
   t.Conn("192.168.15.206",8882);
   t.Send(bsend);
   System.Threading.Thread.Sleep(500);
   Trace.WriteLine("接收数据:"+BitConverter.ToString(t.Rec(60)));

出错信息:

   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.IO.BinaryReader.ReadBytes(Int32 count)
   at NetClsLib.SFTcp.Rec(Int32 len) in e:\\sf\\netclslib\\sfsocket.cs:line 95 无法从传输连接中读取数据。
“SGIPSP.exe”: 已加载“c:\\winnt\\assembly\\gac\\mscorlib.resources\\1.0.5000.0_zh-chs_b77a5c561934e089\\mscorlib.resources.dll”,未加载符号。
未处理的“System.ArgumentNullException”类型的异常出现在 mscorlib.dll 中。

修改为:   Trace.WriteLine("接收数据:"+BitConverter.ToString(t.BinRd.ReadBytes(4) )); 则OK。

REC函数只是简单的封装:public byte [] Rec(int len)
  &leftsign;
   try
   &leftsign;
    return BinRd.ReadBytes(len);
   &rightsign;
   catch(Exception e)
   &leftsign;
    Trace.WriteLine(e.StackTrace+"\\t"+e.Message);
    return null;
   &rightsign;
  &rightsign;

byte []b=BinRd.ReadBytes(len);
    return b; 这样也可以~~~~~

晕倒!◎#×◎……◎#※…… 现在居然又都可以了!!!!!!!!!!!!!

BinaryReader.ReadBytes 方法  [C#]请参见
从当前流中将 count 个字节读入字节数组,并使当前位置提升 count 个字节。
包含从基础流中读取的数据的字节数组。如果到达了流的末尾,则该字节数组可能小于所请求的字节数。

我怀疑和大小有关,如果读取小于数据流的个数,那么可以,如果读取大于数据流的个数,那么ERROR。

原创文章,转载请注明: 转载自YippeeSoft开心软件

本文链接地址: C# SOCKET的读取BinaryReader.ReadBytes

历史博文

标签:,