2016-05-26 4 views
0

Является ли GetHashCode() безопасным для использования?Использование GetHashCode() в сокете как временное UniqueID

У меня есть сервер сокетов, а затем клиентская программа, в которой клиентская программа подключается к серверному консольному приложению, размещенному на сервере, а затем я добавляю Socket в экземпляр сеанса (класс Session.cs), и в этом классе у меня есть строка называется

private readonly string uniqueSessionID; // UniqueID 

Теперь мне нужно, чтобы быть уникальными для этого гнезда до тех пор пока я отправить сообщение с вас устраивает UniqueID

Я использую ниже функцию, чтобы получить вас устраивают UniqueID на клиентском приложении

string machineID = string.Empty; 

      ManagementObjectCollection mbsList = null; 
      ManagementObjectSearcher mbs = new ManagementObjectSearcher("Select * From Win32_processor"); 
      mbsList = mbs.Get(); 

      foreach (ManagementObject mo in mbsList) 
       machineID = mo["ProcessorID"].ToString(); 

      ManagementObject dsk = new ManagementObject(@"win32_logicaldisk.deviceid=""c:"""); 
      dsk.Get(); 

      machineID = machineID + dsk["VolumeSerialNumber"].ToString(); 

, после отправки его на сервер, после того, как сервер получит его, он заменит строку uniqueSessionID новым идентификатором, а уникальный идентификатор temp будет идентифицироваться только при отправке permenant, я мог бы использовать IP-адрес, но я беспокоились, что два человека будут подключаться под одним и тем же WIFI или некоторым подобным.

В нижней строке вопроса есть, является ли GetHashCode() безопасным? Будет ли он оставаться неизменным в течение примерно 30 секунд, подключив и отправив первое сообщение, чтобы я мог идентифицировать идентификатор, который был установлен, когда они подключались при отправке первого сообщения?

+0

У вас может быть только одно соединение с теми же 3 свойствами 1) Исходный IP-адрес 2) IP-адрес назначения) Номер порта. Таким образом, у Socket Client будет уникальный [порт, IP] для каждого удаленного подключения. – jdweng

ответ

0

GetHashCode безопасен в использовании - в смысле он не будет генерировать исключения. На самом деле нет никаких других гарантий для того, чтобы эта функция возвращала стабильное значение для типов, которые не предназначены для ключей для HashSet/Dictionary.

Для Socket введите значение , вероятно,, чтобы остаться на месте, но вы не должны полагаться на него.

Было бы лучше создать уникальный идентификатор (т. Е. Guid.NewGuid()) и сохранить его где-нибудь.

Смежные вопросы