服务器端把List都打包好了,而且确实都是正确的好友信息,但是到客户端这边虽然List中的个数一样,但是这些都是一样的内容了,而且都是List中最后一个的内容,这是什么原因呢?如何解决呢?
服务器端的打包代码:                    DataSet dsf = new DataSet();
                    dsf = ms.getData("select * from Relation where userName = '" + DBacket.loginName + "'");
                    int friendsNum = dsf.Tables[0].Rows.Count;
                    MessageBox.Show("好友人数:" + friendsNum);                    myClassLibrary.MyFriend myFrid = new MyFriend();
                    List<myClassLibrary.MyFriend> frilist = new List<MyFriend>();                    for (int idx = 0; idx < friendsNum; idx++)
                    {
                        myFrid.friendName = dsf.Tables[0].Rows[idx][1].ToString();
                        MessageBox.Show("这个好友是谁:" + myFrid.friendName);                        DataSet dsidx = new DataSet();
                        dsidx = ms.getData("select HeadPicture from UserInfor where UserName = '" + myFrid.friendName + "'");
                        myFrid.friendPicNo = dsidx.Tables[0].Rows[0][0].ToString();
                        MessageBox.Show("这个好友的头像索引:" + myFrid.friendPicNo);
                        frilist.Add(myFrid);
                        MessageBox.Show("这个好友在列表中的信息:" + frilist[idx].friendName + frilist[idx].friendPicNo);
                    }                    mySD.MySerializeFriendsList(frilist);
                    byte[] sendFs = mySD.myBuffer;                    netStream.Write(sendFs,0,sendFs.Length);客户端的接受代码                            //接受来自服务器传来的好友列表信息
                            netStream.Read(recvBuffer,0,recvBuffer.Length);
                            mySD.MyDeserializeFriendsList(recvBuffer);
                            myfriendsList = mySD.friendList;

解决方案 »

  1.   

    myClassLibrary.MyFriend myFrid = new MyFriend();这句话写在for循环里面
      

  2.   

    正确,或者把MyFriend定义成struct。
      

  3.   


    版主您好:我按照您的提示改了改,可以了。在这里先谢谢啦,可是又有一个问题了。
    就是在客户端反序列化的时候的一句:mySD.MyDeserializeFriendsList(recvBuffer);错误是:在分析结束之前遇到了流结束符。不知道是什么意思。 肯定多帮帮忙啊 谢谢啦
      

  4.   

    netStream.Read是不是有个返回值?应该是数据一次没有接受完,需要一个循环