Уникальность сокета определяется 4 значениями: (локальный IP, локальный порт, удаленный IP, удаленный порт), и именно так стеки протокола идентифицируют соединение.
Учитывая это, вы можете иметь несколько подключений с одного и того же номера порта к одному и тому же номеру порта, но, например, на другой удаленный адрес. Как правило, вы должны специально запросить
разрешения на использование одного и того же локального порта для более чем одного исходящего соединения.
Ваш пример int clientId = ((IPEndPoint) client.RemoteEndPoint) .Port; не использует локальный порт, но порт на удаленном конце. Это, конечно, не уникально, поскольку разные клиенты могут выбрать один и тот же порт. Ваш порт сервера, вероятно, фиксирован и всегда будет одинаковым для всех соединений. Таким образом, если вы хотите что-то уникальное на стороне сервера, вы должны использовать 4 значения, упомянутые выше.
Однако, если вам нужен только уникальный идентификатор в вашем клиентском приложении среди подключений, которые вы настроили самостоятельно, подойдет локальный порт.