2013-10-26 1 views
1

У меня есть сервер, который принимает соединения асинхронного сокета от нескольких клиентов. Прямо сейчас я назначаю им уникальный идентификатор на стороне сервера, зависящий от их входящего IP-адреса &. Моя забота - что, если 2 клиента соединяются с тем же IP & за NAT. Есть ли лучший способ определить это?Асинхронные сокеты - идентификация уникальных соединений

private static int DetermineSocketToConnectionID(Socket handler) 
     { 
      int connectionIDForHandler = 0; 

      string uniqueIPString = handler.RemoteEndPoint.ToString(); 

      if (Client1Buffers.UserIPAddress == uniqueIPString) 
      { 
       connectionIDForHandler = 1; 
      } 
      if (Client2Buffers.UserIPAddress == uniqueIPString) 
      { 
       connectionIDForHandler = 2; 
      } 

      return connectionIDForHandler; 
     } 
+0

Два клиента за NAT будут иметь одинаковый IP-адрес, но разные порты. – dtb

ответ

1

Вы можете быть лучше иметь те клиенты аутентифицировать себя с сервером на их первом соединении и передать вам то, что вы можете использовать, чтобы идентифицировать их, кроме доверия к сетевой информации. Именно поэтому сеансы и файлы cookie были созданы для входа в клиентов на веб-серверах. Вы можете сделать что-то подобное, установив связь с клиентом и передав им обратно uid, после чего им нужно будет вернуться на сервер при каждом последующем подключении.