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

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

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


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


Ответы (7)


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

person lidgren    schedule 29.05.2010
comment
библиотека lidgren надежна, я успешно использовал ее в производственных условиях! - person Brett; 21.09.2012
comment
Сейчас Lidgren переходит на github: github.com/lidgren/lidgren-network-gen3 - person ANeves thinks SE is evil; 29.01.2015

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

Здесь еще не упоминалась библиотека 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);

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

person MarcF    schedule 11.02.2013
comment
Практически все ваши посты являются рекламой того, что, очевидно, является вашим веб-сайтом, и ни один из них не раскрывает этот факт. - person Andrew Barber; 11.02.2013
comment
@AndrewBarber - Для справки, я один из разработчиков networkComms.net. Я никогда не пытался скрыть это, сейчас я внесу изменения в свой профиль, чтобы прояснить это. - person MarcF; 11.02.2013
comment
Обязательно внимательно прочитайте Часто задаваемые вопросы о саморекламе. В частности, посмотрите ту часть, где говорится, что если многие из ваших сообщений носят рекламный характер, вы, вероятно, здесь по неправильной причине. Также обратите внимание, что требуется публиковать заявление об отказе от ответственности каждый раз, когда вы ссылаетесь на свой собственный сайт/продукт. - person Andrew Barber; 11.02.2013
comment
@AndrewBarber - Понятно, я не знал о требовании об отказе от ответственности. - person MarcF; 11.02.2013
comment
У вас есть пример эхо-клиент-сервера? - person Syaiful Nizam Yahya; 21.11.2013
comment
Реклама сайта платной библиотеки, которая скрывает тот факт, что это платная библиотека, за ссылкой «Скачать», которая ведет на страницу «Выберите пакет!». страница с указанными ценами ... Я бы предпочел, чтобы он не пытался скрыть факт при быстром просмотре, а вместо этого имел ссылку «Купить». - person NeroS; 27.01.2016

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

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

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

person John Saunders    schedule 22.05.2010

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

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

person Stephen Cleary    schedule 22.05.2010
comment
Я бы не рекомендовал Nito.Async на момент написания этой статьи (v1). Цитата с сайта Nito.Async Текущий API Nito.Async.Sockets был заморожен. Будет разработан новый (v2) API, обеспечивающий лучшее разделение между компонентами протокола (например, тип кадрирования сообщений, система проверки активности и т. д., все они будут ортогональными). Новый API может быть основан на платформе Rx, но, скорее всего, он будет привязан к библиотеке параллельных задач .NET 4.0. - person Syaiful Nizam Yahya; 02.01.2014
comment
Nito.Async.Sockets по-прежнему можно использовать; v2 API планировался годами, но у меня просто не было времени это сделать. - person Stephen Cleary; 02.01.2014

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

person Björn    schedule 22.05.2010

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

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

person Callum Rogers    schedule 22.05.2010
comment
В то время как ванильная библиотека сокетов может быть достаточной для некоторых людей, люди, которые не любят эффективно управлять ресурсами, должны либо искать сетевую библиотеку, либо подготовиться к написанию большого количества кода управления ресурсами (масштабирование, минимизация сборщика мусора, многопоточность, балансировка нагрузки, обработка сетевых ошибок и т.д.). - person Syaiful Nizam Yahya; 02.01.2014

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

person Thomas Christof    schedule 03.10.2018