C# - 服务器端密码保护

时间:2010-09-27 07:38:15

标签: c# visual-studio-2008 sockets password-protection

我正在编写两个控制台应用程序,一个客户端和一个服务器。 我有点困在两件事上,起初看起来相当容易......

#1:我想为下面的一段代码编写一个函数,它将位转换为字符串,但我无法弄明白。当我使用它时服务器总是崩溃。我的功能与此功能略有不同,但那是因为我当前的代码必须包含连接信息,我认为有更好的方法:

        byte[] b = new byte[100];
        int k = s.Receive(b);

            string packet = null;
        for (int i = 0; i < k; i++)
        {
            Console.Write(Convert.ToChar(b[i]));
            packet = packet + Convert.ToChar(b[i]);
        }

我想这个功能不是问题,但是我如何使用它。任何帮助都会非常苛刻。

编辑: 我这样打电话和使用它:

    byte[] b = new byte[100];
    string response = BitConvert(b);

    if (response == "Hi there")

#2 我希望客户端只用密码发送一次数据包。如果该密码与服务器中作为字符串提到的密码不匹配,它应该关闭与客户的联系。

我知道如何只发送一次数据包,但我不知道如何为每个客户端检查服务器中的数据包一次。

或者换句话说,目前服务器无法知道客户端是否已经过身份验证。所以我猜客户端需要有某种套接字ID,服务器需要一个带有ID的表,以及一个布尔值来查看它是否已经过验证。

2 个答案:

答案 0 :(得分:1)

第一部分,将字节变成字符串......怎么样:

byte b[] = new byte[100];
int k = s.Receive(b, b.Length, 0);

string packet = Encoding.ASCII.getString(b, 0, k);

第2部分......不确定是否在我的头顶。

答案 1 :(得分:1)

我在Rob上面的第1部分和第2部分...... 假设您正在使用TCP连接,System.Net.Sockets类应该处理您的 需要。

如果您使用AcceptSocketAcceptTcpClient从传入连接请求队列中提取连接,您将获得该连接唯一的套接字或tcpclient。只需将它打开,直到你完成它。 (如果您的服务还有其他事情要做,也有非阻塞替代方案......)

如果客户端关闭它或打开新连接,则必须以某种方式重新进行身份验证。 (这可能是通过包含您在首次进行身份验证时为其生成的令牌 - 如果您使用UDP连接,这是您唯一的选择。)