Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Сетевая библиотека .NET

Автор вопроса: MarkОтветов: 7

Я искал достойную сетевую библиотеку для С#. Он будет использоваться с XNA 3.1 и .NET Framework 3.5. Многопользовательский стиль будет серверным и клиентским. В настоящее время я изучаю сеть библиотек Lidgren, но она кажется устаревшей.

Кто-нибудь получил несколько хороших предложений для хорошей сетевой библиотеки. Он должен легко обрабатывать более 30 клиентских подключений одновременно.

  • было бы нормально, если бы библиотека была написана на VB.NET? John Saunders 22.05.2010
  • @John Saunders: Если библиотека представляет собой скомпилированную сборку .Net, она будет в CIL, поэтому исходный язык не имеет значения. Callum Rogers 22.05.2010
  • @Callum: спасибо, я это знаю. Я спросил Марка, так как он попросил сетевую библиотеку C#. John Saunders 22.05.2010
  • Он попросил сетевую библиотеку ДЛЯ C#, а не написанную на C#. Erik Funkenbusch 29.05.2010

networkingxna

Ответы

Ответ 1 · рейтинг 3 · lidgren

Ваша ссылка действительно устарела; но если вы прочитаете страницу, она направит вас к более новой версии: http://code.google.com/p/lidgren-network-gen3/

Ответ 2 · рейтинг 11 · MarcF

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

Здесь еще не упоминалась библиотека networkComms.net. Он имеет множество сложных функций (таких как сериализация, сжатие и шифрование), но, учитывая конкретное количество соединений, он способен обрабатывать более 1000 соединений со скоростью передачи 1 Гбит/с+. Существует простая статья о том, как создать быстрое клиент-серверное приложение но вкратце вы можете отправлять и получать следующим образом.

Отправлять:

//This is the simplest way to send with more advanced options also available
//Parameters are message type, IP address, port and the object to send
NetworkComms.SendObject("Message", "127.0.0.1", 10000, "Networking in one line!")

Получить:

//We need to define what happens when packets are received.
//To do this we add an incoming packet handler for
//a 'Message' packet type.
//
//This handler will automatically convert the incoming raw bytes into a string
//(this is what the <string> bit does) and then write that string to the
//local console window.
NetworkComms.AppendGlobalIncomingPacketHandler<string>("Message", (packetHeader, connection, incomingString) => { Console.WriteLine("\n  ... Incoming message from " + connection.ToString() + " saying '" + incomingString + "'."); });

//Start listening for incoming 'TCP' connections. The true
//parameter means try to use the default port and if that
//fails just choose a random port.
//See also UDPConnection.StartListening()
TCPConnection.StartListening(true);

Отказ от ответственности: я являюсь одним из разработчиков этой библиотеки.

Ответ 3 · рейтинг 2 · John Saunders

Вы, кажется, ищете не в том месте. Вы, кажется, не смотрели в самой .NET Framework.

Как насчет использования WCF? Как насчет использования TcpListener?

Что вам нужно, что они не обеспечивают?

Ответ 4 · рейтинг 2 · Stephen Cleary

WCF - одна из возможностей, хотя для этого сценария она может быть тяжеловесной. Сокеты .NET, OTOH, часто слишком низкоуровневые; они не являются простым "компонентом", который можно просто подключить (как сеть, так и многопоточность должны быть изучены задолго до того, как класс Socket можно будет правильно использовать).

Я написал библиотеку Nito.Async.Sockets, которая является частью Nito.Async. Он устраняет соображения многопоточности из программирования сокетов, а также включает абстракцию более высокого уровня, которая обрабатывает кадрирование сообщений и keepalives .

Ответ 5 · рейтинг 2 · Björn

Как лидгрен устарел? Это по-прежнему единственный крупный игрок в пространстве .NET. для игровых сетей.

Ответ 6 · рейтинг 1 · Callum Rogers

Пробовали ли вы встроенные библиотеки .Net из System.Net? Очень маловероятно, что вам вообще нужно использовать внешнюю библиотеку. вот пример простого многопоточного TCP-сервера, и вы может также захотеть взглянуть на UDP. Есть множество руководств, если вы просто немного погуглите.

Попробуйте просмотреть System.Net.Sockets страницу MSDN для получения дополнительной информации. .

Ответ 7 · Thomas Christof

На данный момент я хотел бы добавить мою библиотеку в этот поток. также доступен NuGet.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы