Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Распределённые приложения и сеть > Обычный TCP-IP. |
Автор: vlsaf 15.2.2010, 19:24 |
Всем привет. На сервере вертится приемная часть, которая обрабатывает запросы, пришедшие по протоколу TCP IP. Используется обычный TcpListner. На каждое соединение запускается отдельный поток, который работает со своим клиентом. В потоке есть публичный объект public TcpClient tcpClient; Вопрос. Мне нужно однозначно идентифицировать клиента. Как это сделать? Можно ли использовать какой-нибудь идентификатор потока? Ведь каждого клиента обрабатывает свой поток. Или можно ли как-то взять IP клинта и номер порта по которому он соединился + м.б. еще что-то? Говорят, что нужно взять еще интерфейс и порт. Не знаю. Надоумьте, как? Я брал вот такое значение в качестве идентификатора клиента tcpClient.Client.Handle Но как показала практика, бывают случаи, когда разные клиенты получают один и тот же Handle! Я не знаю, как это происходит, но очень редко происходит. М.б. когда хендл освобоздает один клиент, то тут же номер этого хендла присваивается другому? Не знаю. Наверно нужно иметь физический адрес сетевой платы клиента. Тогда ошибок не будет. Например такой "00-A0-D5-FF-FF-A5" Но как его поиметь? |
Автор: vlsaf 16.2.2010, 00:09 |
Народ. Решение было элементарным ![]() И почему я сразу до него не додумался! Когда стартует поток, обрабатывающий IP соединение с клиентом, я инициализирую GUID для этого потока. И все! |
Автор: Random13 17.2.2010, 19:30 |
![]() |
Автор: nmn 19.2.2010, 11:51 |
IP+порт клиента будут уникальными для каждого клиента |