C/S程序,服务器端如何记录客户端登陆时的计算机名、IP地址、帐套名、用户名,本人在看  速达的E3  产品时,每当客户端登陆时,就显示上面的信息,1、客户端是如何将此信息发送给服务器端啊?
2、服务器端是如何实现的啊?
3、不知用C#程序如何实现啊?特来请教!

解决方案 »

  1.   

    我不知道你的c/s是在一台机器还是要网络访问的,一台机器的应该容易,如果是网络访问的,有TcpClient或是Socket能获得客户端的这些信息吧。猜测。
      

  2.   

    服务端有数据库吧,加个表,存放用户信息
    每次用户登录的时候,把这些查出来返回给客户端
    这样就可以显示出来
    这些信息,可以在注册的时候获取,也可以在登录的时候客户端获取本地的MAC,IP地址
      

  3.   

    string hostname = Dns.GetHostName();
    IPAddress[] address = Dns.GetHostAddresses(hostname);
    IPEndPoint ipendpoint = new IPEndPoint(address[0], 1234);
    string IP = ipendpoint.Address.ToString();
      

  4.   

    socket通讯的例子很多都有lz的需求
      

  5.   

    你相当于是写个监听器!
    可以这样写!
    1.先开个端口接收客户端的 通过 TCP/IP 协议 传过来 SOCKET 的通信
    2. 建立该程序的缓存区等        /// <summary>
            /// 服务器程序使用的端口,默认为8888
            /// </summary>        /// <summary>
            /// 接收数据缓冲区大小64K 
            /// </summary>        /// <summary>
            /// 服务器端的监听器
            /// </summary>
            /// <summary>
            /// 保存所有客户端会话的哈希表
            /// </summary>
    3.序列化在线列表,向客户端返回序列化后的字节数组
    4./// <summary>
            /// 启动监听,轮询监听客户机请求并将客户端套接字存入转发表
            /// </summary>
            public void StartUp()
            {
                IPAddress _ip = Dns.GetHostAddresses(Dns.GetHostName())[0];
                _tcpl = new TcpListener(_ip, _port);
                _tcpl.Start();
                Console.WriteLine("服务器已启动,正在监听...\n");
                Console.WriteLine(string.Format("服务器IP:{0}\t端口号:{1}\n", _ip, _port));
                while (true)
                {
                    byte[] packetBuff = new byte[_maxPacket];
                    Socket newClient = _tcpl.AcceptSocket();
                    newClient.Receive(packetBuff);
                    string userName = Encoding.Unicode.GetString(packetBuff).TrimEnd('\0');
                    //验证是否为唯一用户
                    if (_transmit_tb.Count != 0 && _transmit_tb.ContainsKey(userName))
                    {
                        newClient.Send(Encoding.Unicode.GetBytes("cmd::Failed"));
                        continue;
                    }
                    else
                    {
                        newClient.Send(Encoding.Unicode.GetBytes("cmd::Successful"));
                    }
                    //将新连接加入转发表并创建线程为其服务
                    _transmit_tb.Add(userName, newClient);
                    string svrlog = string.Format("[系统消息]新用户 {0} 在 {1} 已连接... 当前在线人数: {2}\r\n\r\n", userName, DateTime.Now, _transmit_tb.Count);
                    Console.WriteLine(svrlog);
                    
                    Thread clientThread = new Thread(new ParameterizedThreadStart(ThreadFunc));
                    clientThread.Start(userName);
                    //向所有客户机发送系统消息
                    foreach (DictionaryEntry de in _transmit_tb)
                    {
                        string _clientName = de.Key as string;
                        Socket _clientSkt = de.Value as Socket;
                        if (!_clientName.Equals(userName))
                        {
                            _clientSkt.Send(Encoding.Unicode.GetBytes(svrlog));
                        }
                    }
                }
            }
            
      

  6.   

    用Socket的话,客户端连接服务器的时候,服务器端侦听到连接后可以直接获得客户端的Socket,这里面就包含了IP和端口。
    用户名和密码的话自己扩展保存了。
      

  7.   

    客户端连接是通过连接服务端的IP和端口,所以服务端获取的SOCKET中的IP还是服务端的,并不能获取客户端的IP.