Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2011, 15:42   #1
stupid
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 19
Восклицание разбить сообщение

есть программка клиент сервер,клиент отправляет на сервер логин и пароль
Код:
 
void Connect()
        {
            try
            {
 
                client_running = true;
                System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider(); 
                           
                string login = textBox1.Text;                
                string password = textBox2.Text;
                byte[] pass = System.Text.Encoding.ASCII.GetBytes(password);
                pass = x.ComputeHash(pass);
                                String s = "";
                                for (int i = 0; i < pass.Length; i++)
                                        s += pass[i].ToString("X");
                string data = string.Format("Login={0}&Password={1}",login, s);
                                client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                                client.Connect(ip, port);  
                Sender(data);
                
            }
            catch { }
        }
 
        void Sender(string msg)
        {
            try
            {
                byte[] bytes = new byte[1024];
                bytes = System.Text.Encoding.ASCII.GetBytes(msg);
                client.Send(bytes);
            }
            catch { }
        }
сервер принимает
Код:
private void MessageReceiver(Socket r_client)
        {
            // Для каждого нового подключения, будет создан свой поток для приема пакетов
            Thread th = new Thread(delegate()
            {
                while (isServerRunning)
                {
                    try
                    {
                        // Сюда будем записывать принятые байты
                        byte[] bytes = new byte[1024];
                        String data = null;
                        // Принимаем
                        r_client.Receive(bytes);
 
 
                        //data = Encoding.ASCII.GetString(bytes);                                             
                        //запись в реестр
                        RegistryKey saveKey = Registry.LocalMachine.CreateSubKey("software\my_prog");
                        saveKey.SetValue("имя ключа", data);
                        saveKey.Close();
                      
                    }
                    catch { }
                }
            });
            th.Start();
            threads.Add(th);
        }
надо разбить сообщение на логин и пароль,записать в реестр! предполагается что клиент может изменить свой пароль,так что надо чтобы присланные логин и пароль проверялись,потом перезаписывался пароль.
stupid вне форума Ответить с цитированием
Старый 28.03.2011, 17:33   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Раздели из каким-нить знаком, потом string.Split()
Hollander вне форума Ответить с цитированием
Старый 28.03.2011, 17:45   #3
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Решение в лоб:
Код:
public static void Main(string[] args)
{
	string data = @"Login=Login&Password=Password";
	int index = data.IndexOf("=");
	string login = data.Substring(index + 1, data.IndexOf("&") - index - 1);
	data = data.Remove(0, data.IndexOf("&") + 1);
	index = data.IndexOf("=");
	string pass = data.Substring(index + 1, data.Length - index - 1);
		
	Console.WriteLine(login);
	Console.WriteLine(pass);
	Console.Write("Press any key to continue . . . ");
	Console.ReadKey(true);
}
Цитата:
Раздели из каким-нить знаком, потом string.Split()
Например знак & заменить на = ?

upd

Код:
public static void Main(string[] args)
{
	string data = @"Login=MyLogin&Password=MyPassword";
	data = data.Replace("&", "=");
	string[] new_data = data.Split('=');
	
	foreach (string str in new_data)
		Console.WriteLine(str);
	Console.Write("Press any key to continue . . . ");
	Console.ReadKey(true);
}

Последний раз редактировалось psycho-coder; 28.03.2011 в 17:50.
psycho-coder вне форума Ответить с цитированием
Старый 28.03.2011, 17:50   #4
stupid
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 19
Радость

можно как нибудь поподробней?))
разделить знаком...,можно ли так?
Код:
string data = string.Format("Login={0}&Password={1}",login + "*", s);
и что потом делать?как записать в реестр?как сравнивать?
stupid вне форума Ответить с цитированием
Старый 29.03.2011, 09:51   #5
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
можно как нибудь поподробней?))
Смотри. Допустим, что в переменной login будет строка "MyLogin", а в переменной s, будет строка "MyPassword", тогда в переменной data, после форматирования строка будет иметь такой вид "Login=MyLogin&Password=MyPassword" .
Код:
string data = string.Format("Login={0}&Password={1}", login, s);
Следовательно, что бы разбить эту строку в массив используя string.Split, нужно заменить &(амперсанд) на =(равно), тогда строка примет следующий вид - "Login=MyLogin=Password=MyPassword" . Значит, string.Split разобьет строку в массив (см. мой пример выше). Получится аналог:
Код:
string []arr_data = {"Login", "MyLogin", "Password", "MyPassword"};
Из этого следует, что для взятия из массива логина и пароля нужно взять 2-й и 4-й элемент массива arr_data соответственно.
Код:
string login = arr_data[1];
string password = arr_data[3];
Далее записываем в реестр значения, можно прямо из массива, а можно сначала перевести в переменные.

Советую также почитать учебник.
psycho-coder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
разбить на потоки sergei64_89 Помощь студентам 6 21.10.2010 13:09
разбить строку Ceprey Общие вопросы C/C++ 10 24.12.2009 20:47
Как разбить число на цифрыКак разбить число на цифры: 3241 => 3,2,4,1 (Pascal) Banderas123 Помощь студентам 3 07.12.2009 18:26
Разбить книгу Alex19789 Microsoft Office Excel 5 06.10.2009 10:34
Разбить на группы Romuald Microsoft Office Excel 2 04.11.2008 14:40