C # - защита паролем на стороне сервера - PullRequest
0 голосов
/ 27 сентября 2010

Я пишу два консольных приложения, клиент и сервер.Я немного застрял в двух вещах, которые поначалу казались довольно простыми.

# 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 Я хочу, чтобы клиент всегда отправлял пакет только один раз, с паролем. И если этот пароль не совпадает с паролем, указанным в качестве строки на сервере, он должен закрыть соединение с клиентом.

Я знаю, как отправить пакет только один раз, но я не знаю, как проверить пакет на сервере только один раз для каждого клиента.

Или, другими словами, на данный момент сервер не может узнать, был ли клиент уже аутентифицирован.Поэтому я полагаю, что клиент должен иметь своего рода идентификатор сокета, а серверу нужна таблица с идентификатором и логическое значение, чтобы увидеть, аутентифицирован ли он или нет.

Ответы [ 2 ]

1 голос
/ 27 сентября 2010

Я с Робом выше по части 1, а по части 2 ... Если вы используете TCP-соединение, класс System.Net.Sockets должен удовлетворить ваши потребности.

Если вы используете AcceptSocket или AcceptTcpClient для извлечения соединения из очереди входящих запросов на соединение, вы получите сокет или tcpclient, уникальный для этого соединения.просто оставьте его открытым, пока не закончите.(Существуют также неблокирующие альтернативы, если у вашего сервиса есть другие дела ...)

Если клиент закрывает его или открывает новое соединение, ему придется каким-либо образом повторно аутентифицироваться.(Это может быть связано с включением токена, который вы сгенерируете для них при первой аутентификации - это ваш единственный вариант, если вы используете UDP-соединения).

1 голос
/ 27 сентября 2010

Первая часть, получение байтов в строку ... как насчет:

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

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

Часть 2 ... не уверен, с моей головы.

...