下面是客户端数据库连接服务器的代码,现在的问题是在测试的时候,当一般执行到12条数据的时候,程序会在( Session newSession = new Session(client);)报错,错误信息为“已添加项。字典中的关键字:“1660”所添加的关键字:“1660””,具体不知什么原因,忘高手回答,谢谢        /// <summary> 
        /// 客户端连接处理函数 
        /// </summary> 
        /// <param name="iar">欲建立服务器连接的Socket对象</param> 
        protected virtual void AcceptConn(IAsyncResult iar)
        {
            //如果服务器停止了服务,就不能再接收新的客户端 
            if (!_isRun)
            {
                return;
            }            //接受一个客户端的连接请求 
            Socket oldserver = (Socket)iar.AsyncState;            Socket client = oldserver.EndAccept(iar);            //检查是否达到最大的允许的客户端数目 
            if (_clientCount == _maxClient)
            {
                //服务器已满,发出通知 
                if (ServerFull != null)
                {
                    ServerFull(this, new NetEventArgs(new Session(client)));
                }            }
            else
            {                Session newSession = new Session(client);                _sessionTable.Add(newSession.ID, newSession);                //客户端引用计数+1 
                _clientCount++;                //开始接受来自该客户端的数据 
                client.BeginReceive(_recvDataBuffer, 0, _recvDataBuffer.Length, SocketFlags.None,
                new AsyncCallback(ReceiveData), client);                //新的客户段连接,发出通知 
                if (ClientConn != null)
                {
                    ClientConn(this, new NetEventArgs(newSession));
                }
            }            //继续接受客户端 
            _svrSock.BeginAccept(new AsyncCallback(AcceptConn), _svrSock);
        }

解决方案 »

  1.   

    本人刚开始做SOCKET编程,有些地方还是比较生疏,错误提示就是我之前说的,但具体哪里出的问题我真不知道,我用的是异步!谢谢高手回答
      

  2.   

    我怀疑是 _sessionTable.Add(newSession.ID, newSession);这行代码的问题
    1660应该是sessionID,但是我不知道你这个Session newSession = new Session(client);里做了什么,最好代码也提出来,搞java的 门外汉献丑了
      

  3.   

    代码太多了,贴出来你会晕的,呵呵,Session newSession = new Session(client); 这个是客户端与服务器端的会话机制,保存了之前的client的异步传输的信息;