2009-07-04 7 views
0

Может кто-нибудь помочь, я пытаюсь понять, что мне нужно сделать, мне были поручены задачи написания сервера и клиента в TCP (UDP). в основном несколько клиентов будут подключаться к серверу .. и сервер отправляет MESSSAGES клиенту.TCP или UDP помощь с сервером/клиентом в C#?

У меня нет проблем при создании сервера и клиента, но с tcp я не уверен, какой путь. Делает ли .net 3.5 все, или мне нужно идти на поиски какого-то компонента?

Я ищу хорошие примеры с C# для TCP или UDP. Это то, где я не уверен на 100%. Насколько я знаю, есть UDP и TCP ... 1 подключен, а 1 нет .. Так в каком направлении я могу пойти и могу C# поддерживать оба? Преимущества недостатки?

Скажите, если сервер должен поддерживать несколько клиентов, которым нужно только открыть 1 порт или мне нужно открыть 2?

Также, если клиент терпит крах, мне нужно, чтобы он не работал с SERVER, поэтому сервер может либо игнорировать его, либо закрывать соединение, если он открыт или тайм-аут соединения ... Если на самом деле соединение необходимо снова, tcp udp

Любые идеи, в которых i shoudl выпрашивают и выбирают, какой протокол и количество портов мне нужно назначить?

благодаря

ответ

1

Есть ли требование сделать это на таком низком уровне? Почему бы не использовать WCF? Он полностью поддерживает обмен сообщениями через TCP/IP, используя двоичную передачу данных, но он находится на гораздо более высоком уровне абстракции, чем сырые сокеты.

+0

yep! бог, ваше право !!! Я использую wcf для своих веб-сервисов ... Одна вещь, хотя это позволяет серверу PUSH-информации клиенту? В основном, что клиент должен получать msgs, но он должен нуждаться в POLL ?? .. если это так, я думаю, что это решило мои проблемы –

+0

, и я предполагаю, что он будет работать за NAT? –

+0

@mark: Я не знаю о сценариях с чистым нажатием, хотя я знаю, что он поддерживает дуплексные каналы, которые обеспечивают обратный вызов от службы клиентам. Что касается NAT, см. Http://msdn.microsoft.com/en-us/azure/dd441706.aspx и понять, что они все это сделали, просто используя точки расширяемости, которые вы также можете использовать, используете ли вы свой код для этого или не. –

0

Все, что вам нужно, это в .NET 3.5 (и, вероятно, ниже). Ознакомьтесь с документацией и примерами с классом UdpClient в MSDN, чтобы узнать, как написать свой клиент/сервер. Быстрый google нашел пример кода для server и client на www.java2s.com среди многих других сетевых примеров на C#. Не откладывайте доменное имя.

2

Это звучит так, как будто вы не совсем поняли разницу между TCP и UDP.

TCP - соединение предназначенный. то есть 2 одноранговых узла будут иметь выделенное соединение. Доставка и заказ пакетов гарантированы. Обычно сервер будет представлять порт, и несколько клиентов могут подключиться к этому порту (подумайте о HTTP-сервере и браузерах).

UDP - без установления соединения. Он не гарантирует доставку пакетов или заказы. Вы можете легко реализовать механизмы трансляции и многоадресной рассылки. Если вам нужна какая-то надежность, вам придется реализовать это поверх UDP. Иногда вам может быть безразлично и просто выдавать запросы и повторять попытку без ответа (SNMP делает это). Поскольку это бесконтактный, вы действительно не беспокоитесь о том, что сверстники находятся вверх/вниз. Вам просто нужно повторить попытку.

Так что ваш выбор протокола продиктован вышеуказанным. например требуется ли вашему клиенту выделенное соединение с сервером? Передаете ли вы одни и те же данные нескольким клиентам? Можете ли вы переносить потерю пакетов (например, обновления цен в реальном времени и т. Д.). Возможно, возможно использовать как TCP, так и UDP для разных требований в вашем приложении (например, TCP для регистрации заказов, UDP для передачи обновлений цен/событий?)

Я бы рассмотрел ваши требования и ознакомился с ограничениями и функциями TCP и UDP. Это должно сделать вещи немного яснее.

3

UDP минусы:

  • пакет ограничение размера означает, что вы можете только послать небольшие сообщения (менее чем около 1.5k байт).
  • Недостаток потока затрудняет защиту UDP: трудно выполнить схему аутентификации, которая работает на обмен с потерями, а также нелегко защитить целостность и конфиденциальность отдельных сообщений (без использования ключа).
  • Гарантия доставки не означает, что ваша цель должна быть подготовлена ​​к потере сообщения. Теперь легко утверждать, что если цель может обрабатывать полную потерю сообщений (что возможно), то зачем вообще их отправлять?

UDP Pros:

  • Нет необходимости хранить системную конечную точку на сервере для каждого клиента (т.е. нет сокета.). Это одна из основных причин, почему MMO-игры, подключенные к сотням тысяч клиентов, используют UDP.
  • Скорость: тот факт, что каждое сообщение направляется индивидуально, означает, что вы не можете попасть в переполнение потока, например TCP.
  • Трансляция: UDP может транслироваться всем слушателям в сегменте сети.

Вы не должны даже рассматривать UDP, если вы рассматриваете TCP тоже. Если вы рассматриваете TCP, вы думаете о потоке (ровно один раз в порядке сообщений), а использование UDP поставит бремя фрагментации, повторения и подтверждения, дублирования обнаружения и заказа в вашем приложении. Вы не будете заново изобретать TCP в своем приложении, и потребовалось бы всем инженерам в течение 20 лет, чтобы получить , что вправо (или, по крайней мере, так же правильно, как и в IPv4).

Если вы не знакомы с этими темами, я рекомендую вам пойти с потоком и использовать WCF, по крайней мере, это дает вам преимущество в том, чтобы легко и просто переключать и отключать различные транспорты и протоколы. Будет намного сложнее изменить базу кода с TCP на UDP и наоборот, если вы сделали неправильный выбор, используя исходные компоненты .Net.