Разделение строки на 2 строки в позиции персонажа - PullRequest
0 голосов
/ 18 марта 2019

В настоящее время я разрабатываю клиент и сервер для хранения и поиска идентификатора пользователя (например, 542351) и местоположения (например, "находится в библиотеке")

Это код, который я сейчас использую для разделения полученных клиентских аргументов (идентификатор пользователя "location").

static void doRequest (NetworkStream socketStream)
{
    string Protocol = "whois";
    Dictionary<string, string> userLocationData = new Dictionary<string, string>();

    try
    {
        StreamWriter sw = new StreamWriter(socketStream);
        StreamReader sr = new StreamReader(socketStream);

        //sw.WriteLine(args[0]);
        //sw.Flush();
        //Console.WriteLine(sr.ReadToEnd());

        String Line = sr.ReadLine().Trim();
        Console.WriteLine("Request Received: " + Line);
        string[] sections = Line.Split(new char[] { ' ' }, 2);

        string username = sections[0];
        string location = sections[1];
        string result;

        if (location == null)
        {
            if (userLocationData.ContainsKey(username))
            {
               Console.WriteLine("Requested user location found."); //Server side only
               userLocationData.TryGetValue(username, out result);
               sw.WriteLine(result);
               sw.Flush();

            }
            else
            {
                        Console.WriteLine("Requested user location NOT found."); //Server side only
                        sw.WriteLine("ERROR: no entries found");
                        sw.Flush();
            }
        }
        else
        {
            userLocationData.Add(sections[0], sections[1]);

            if (userLocationData.ContainsKey(username))
            {
                Console.WriteLine("User location has been updated.");
                sw.WriteLine("OK");
                sw.Flush();
            }
            else
            {
                Console.WriteLine("Error, could not add user to database.");
            }
        }
    }

    catch
    {
        Console.WriteLine("Something went wrong");
    }
}

По сути, мой сервер может обрабатывать при отправке 2 аргументов, поскольку он разбивает их на 2 строки, используя Line.Split(new char[] {' '}, 2);

Проблема в том, что пользователь отправляет только 1 аргумент от клиента, например, просто идентификатор пользователя (6-значный номер), сервер не ловит его и бросает ловить что-то пошло не так.

Я предполагаю, что это потому, что когда сервер получает только идентификатор пользователя, 1 аргумент, он не может разбить строку на 2, так как нет места или чего-либо для заполнения строки второго раздела [1].

По сути, мне просто нужно иметь возможность прочитать строку и разделить ее на 2 строки, если это больше, чем просто идентификатор пользователя.

например, 55432 "находится в библиотеке" - должно быть 2 строки

например, 55432 - будет только 1 строка.

...