2010-12-13 2 views
-1

У меня есть простое клиентское/серверное приложение TCP. Как настроить две программы на стороне сервера, для этого требуется имя пользователя и пароль, а когда клиент пытается подключиться, они должны ввести правильное имя пользователя и пароль и отправить его на сервер, на стороне сервера проверьте, правильно ли это имя пользователя и пароль, если это правильно, то он разрешает соединение, в противном случае он отклоняет соединение.C# TCP/IP-сервер и клиент

ответ

1

Это невозможно сделать с использованием простого TCP/IP. Вам придется либо изобретать какой-то протокол, либо использовать WCF или тому подобное.

Поскольку «соединение» происходит до того, как что-либо может быть отправлено, нет способа отправить учетные данные «вместе со связью». Вам нужно будет подключиться к клиенту, получить команду «Вход», проверить учетные данные и передать уникальный идентификатор, который затем необходимо отправить вместе с каждой командой, чтобы сервер мог проверить, был ли клиент аутентифицирован. Вот как я сделал бы это, если бы WCF не был вариантом.

+0

У меня есть элемент управления входами, где пользователь должен ввести имя пользователя и пароль, но проблема в том, что любой может просто сделать программу для подключения к определенному ip-адресу с правильным портом, и у них будет подключение к нему. Вот почему я хотел, чтобы серверная сторона была вместо chc, прежде чем разрешить подключение – user464111

+0

Я знаю, чего вы пытаетесь достичь, но этого просто не может быть сделано с использованием TCP/IP, только вы не определяете какой-то протокол по TCP/IP. Как я уже сказал, вы можете начать «сеанс» на сервере для каждого клиента (который вы все равно должны были бы реагировать на сервер). Если клиент аутентифицирован правильно, принимайте и выполняйте другие команды, но «Логин», в противном случае - нет. Вы можете либо отправить клиенту маркер, который вы предоставили после успешного входа в систему, либо сервер «помнить» успешно прошедших проверку подлинности клиентов. –

0

Белый Торстен технически правильно, я все еще думаю, что есть решение:

Пусть сервер принимает все соединения, но затем ожидать, как первые данные в связи с этим имя пользователя и пароль. Если они неверны, сервер будет закрывать соединение и не обрабатывать какие-либо запросы, которые клиент мог отправить в соединение.

+0

*** scratchhead *** Разве это не эквивалентно тому, что я сказал, включая мои комментарии? –

+0

Не совсем. OP занимается использованием несанкционированных соединений. Поэтому, указывая на то, что на самом деле это имя пользователя и пароль (а не «учетные данные»), и указывая, что вы закрываете соединение, когда учетные данные неверны, могут быть ключом к пониманию. Кроме того, я не вижу смысла использовать файлы cookie здесь. –

2

Используйте WCF, так как вы, очевидно, раньше не использовали чистые сокеты. Скорее всего, это будет более стабильное решение, если вы попытаетесь изучить сокеты и придумаете свой собственный протокол.

Вы можете использовать WCF вместе с netTcpBinding для достижения желаемого. У вас есть пример здесь: http://www.dotnetspider.com/resources/19314-Client-server-sample-using-WCF-net-tcp-binding.aspx

Прошу прощения, если это был не тот ответ, который вам нужен, но есть много, что необходимо выполнить правильно, чтобы получить бесплатное решение для клиент/сервер tcp/ip ,

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