Я искал достойную сетевую библиотеку для С#. Он будет использоваться с 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
Ваша ссылка действительно устарела; но если вы прочитаете страницу, она направит вас к более новой версии: 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 для получения дополнительной информации. .