У меня есть решение с двумя проектами, которые действуют как сервер и клиент соответственно. Клиент - это простое консольное приложение, которое отправляет данные на сервер. Сервер представляет собой приложение WPF, которое получает данные и отображает их в datagrid. Здесь используется подход MVVM.C# Использование статических переменных в разных проектах
В интерфейсе сервера есть три текстовые поля, в котором пользователь может ввести в:
IP-адрес: ("127.0.0.1")
Порт: (некоторые порты)
разделители (некоторые символы, как «@», например)
задача для меня в этом, заключается в том, whate ver delimeter, который пользователь предоставляет, он должен использоваться в проекте клиента, который должен быть помещен между данными, которые должны быть отправлены. Например, клиент посылает:
Имя + разделитель + фамилия + разделители + Возраст
Что я пробовал:
Я добавил класс Utils со статическими полями для IPAddress, порт и разделители как это:
public class Utils
{
public static string IP_ADDRESS = " ";
public static int PORT = 0;
public static char DELIMETER = '\0';
}
затем я попытался изменить эти значения в моем ViewModel, где соответствующие свойства, которые связаны с пользовательским интерфейсом являются по assignin г им:
private void storeData()
{
Utils.IP_ADDRESS = IP;
Utils.PORT = Port;
Utils.DELIMETER = Delimeter;
}
В клиентской программе:
static void Main(string[] args)
{
Client client = new Client(Utils.IP_ADDRESS, Utils.PORT);
while (true)
{
client.SendData("some Name" + Utils.DELIMETER + "some Surname" + Utils.DELIMETER + some Age + Utils.DELIMETER + "something else");
Thread.Sleep(3000);
}
}
Проблема здесь заключается в том, что всякий раз, когда я начинаю новый экземпляр клиента значения из класса Util все еще те, по умолчанию (NULL).
Любая помощь приветствуется.
Должно ли _client_ указывать информацию о соединении для установления соединения? В любом случае статические vars ограничены AppDomain, поэтому клиентский процесс будет иметь свои собственные копии статических свойств (поэтому они являются нулевыми). –
Если сервер может изменить свои спецификации интеграции *, пока он работает *, то единственным способом для клиента получить обновленные спецификации будет запрос на сервер. Может быть, создать общую операцию, которую клиент может вызвать там, где сервер возвращает разделитель (и любые другие спецификации, которые могут понадобиться клиенту)? – David
Вы должны использовать файл конфигурации и читать/записывать общие переменные (IP_ADDRESS, PORT, DELIMITER) из/в этот файл. –