你确认服务端和可断使用的序列化方法一样吗?
使用.net提供的这几种:
BinaryFormatter
SoapFormatter
XmlSerializer还是你自己定义的,如果是自己定义的,一定要保证c和s端用的是同一版本的dll

解决方案 »

  1.   

    楼主你的结贴率也太低了吧!
    不过还是给你一个意见吧你的问题,很有可能是因为粘包了,如果不知道什么是粘包,直接Baidu一下,如何验证这个问题呢1. 首先,你要确保,两个数据包(也就是两个序列化的对象),隔几秒种以上,发送看看会不会出问题,如果不会再接着
    2. 然后,连续的发送两个数据包(也就是两个序列化的对象),中间没有任何间隔,这时候就应该会出问题了,如果确实出问题,那就是粘包的问题,应该没有人,是直接把对象序列化,就直接发送的,你还应该要知道,什么叫做协议。如果你明白了我说,给我80分吧
      

  2.   

    dll版本是一样的,而且当我只接收一个包时,有时候成功,有时候失败,还是没接收完整就已经接收完成导致的结果呢?
      

  3.   

    接收的数据有问题,或者说数据接收那个模块有问题,一般封装较好的接收模块都会保证收到数据完整可靠,不知道这个GISTcpClient是什么。
      

  4.   

    GISTcpClient.Receive(_reciveData);
    能保证一次把所有数据接收完吗?
      

  5.   

    跟底层通信协议没啥关系
    比如说你序列化得到了10000个字节,客户端必须在接收完所有字节后才能反序列化。而你每次调用GISTcpClient.Receive后就反序列化,如果不是一次取完10000个字节的话当然会出现异常。
      

  6.   

    一定要用GISTcpClient吗?GISTcpClient.Receive(_reciveData)这样的封装没啥必要。
    如果可以用NetworkStream就简单很多了,为啥要自己给自己找麻烦呢。
      

  7.   

    我现在就是用的NetworkStream有问题啊 !不知道咋么解决!
      

  8.   

    随便挑个重点吧:比如说“ResultBaseData result = DataFormatter.DataDeSerialize(_reciveData, 0, _reciveData.Length) as ResultBaseData;”,你的_reciveData声明为多大就把它整个作为有用的信息吗?假设你声明 _maxPacket=80000,可是 GISTcpClient.Receive(_reciveData)只读取8000个字节,你当然应该只用前8000个字节而不是整个80000个字节啦!