2010-05-22 3 views
4

저는 C#을위한 알맞은 네트워크 라이브러리를 찾고있었습니다. XNA 3.1 및 .NET Framework 3.5와 함께 사용할 예정입니다. 멀티 플레이어 스타일은 서버 및 클라이언트가 될 것입니다. 현재 Lidgren Library Network을 조사 중이지만 구식 인 것 같습니다..NET 네트워크 라이브러리

누구나 좋은 네트워크 라이브러리에 대한 좋은 제안이 있습니다. 한 번에 30 개 이상의 클라이언트 연결을 쉽게 처리 할 수 ​​있어야합니다.

+0

라이브러리가 VB.NET으로 작성된 것이 맞습니까? –

+0

@ John Saunders : 라이브러리가 컴파일 된 경우 a.Net 어셈블리는 CIL로되어 있으므로 소스 언어가 무엇인지는 중요하지 않습니다. –

+1

@Callum : 고마워, 알아. Mark에게 "C# 네트워크 라이브러리"를 요청한 이후로 물었습니다. –

답변

3

귀하의 링크는 실제로 구형입니다. 페이지를 읽으면 새로운 버전으로 연결됩니다 : http://code.google.com/p/lidgren-network-gen3/

+0

lidgren 라이브러리는 견고하며 제작 환경에서 성공적으로 사용했습니다! – Brett

+2

Lidgren은 이제 github로 마이그레이션 중입니다. https://github.com/lidgren/lidgren-network-gen3 – ANeves

1

잘못된 장소를보고있는 것 같습니다. .NET Framework 자체에서 보지 못한 것 같습니다.

WCF는 어떻게 사용합니까? TcpListener을 사용하면 어떨까요?

이들이 제공하지 않아도되는 것이 무엇입니까?

1

System.Net에있는 inbuilt .Net 라이브러리를 사용해 보셨습니까? 외부 라이브러리를 사용해야 할 가능성은 거의 없습니다. Here's 간단한 스레드 TCP 서버의 예제이며 UDP도 살펴볼 수 있습니다. 약간의 주위에 당신이 다만 google 경우에 자습서의 짐이있다.

자세한 내용은 System.Net.SocketsMSDN page을 참조하십시오.

+0

일부 사람들에게는 바닐라 소켓 라이브러리로 충분하지만 리소스를 효율적으로 관리하지 않는 사람들은 네트워크 라이브러리를 찾거나 많은 리소스 관리 코드 (스케일링, 가비지 수집기 최소화, 다중 스레드로드 균형 조정, 네트워크 오류 최소화 등)를 준비해야합니다. 취급 등). –

2

WCF는이 시나리오의 경우 비트 중량이 높지만 하나의 가능성이 있습니다. OTOH의 .NET 소켓은 종종 너무 낮은 수준입니다. 그들은 플러그 인하기 쉬운 "구성 요소"가 아닙니다 (네트워킹 및 멀티 스레딩 모두 Socket 클래스를 올바르게 사용할 수있게되기 전에 잘 배워야합니다).

Nito.Async의 일부인 Nito.Async.Sockets 라이브러리를 작성했습니다. 소켓 프로그래밍에서 멀티 스레딩 고려 사항을 제거하고 message framingkeepalives을 처리하는 상위 수준의 추상화도 포함합니다.

+0

이 글을 쓰고있는 현재 Nito.Async는 권장하지 않습니다 (v1). Nito.Async 사이트에서 인용 "현재 Nito.Async.Sockets API가 고정되었습니다. 프로토콜 구성 요소 (예 : 메시지 프레임 유형, Keepalive 시스템 등) 간의 분리를 향상시키는 새로운 (v2) API가 개발 될 예정입니다. 이 모든 API는 Rx 프레임 워크를 기반으로 할 수 있지만 .NET 4.0 Task Parallel Library에 묶일 가능성이 더 높습니다. " –

+0

Nito.Async.Sockets은 여전히 ​​사용할 수 있습니다. v2 API는 수년간 계획되어 왔지만 그럴 시간이 없었습니다. –

10

저급 네트워킹 코드를 직접 작성하는 것을 방해하는 것은 없지만, 라이브러리를 사용하면 많은 시간을 절약 할 수 있습니다. 그리고 스트레스, 당신이 더 나은 자신의 응용 프로그램을 향상 지출 할 수있는 시간.

여기에 언급되지 않은 라이브러리는 networkComms.net입니다. 직렬화, 압축 및 암호화와 같은 정교한 기능이 많이 있지만, 연결 수를 언급하면 ​​1Gbps +의 전송 속도로 1000+ 연결을 처리 할 수 ​​있습니다. how to create a quick client server application에 간단한 기사가 있지만 요약하면 다음과 같이 보내고받을 수 있습니다.

을 보내려면

//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); 

면책 조항 :이 라이브러리의 개발자 중 하나입니다.

+2

거의 모든 게시물 *은 귀하의 웹 사이트에 대한 광고이며, 그 중 누구도 그 사실을 공개하지 않습니다. –

+0

@AndrewBarber - 기록을 위해 나는 networkComms.net의 개발자 중 한 명입니다. 나는 결코 그것을 숨기려고 노력한적이 없다. 나는 그것을 명확히하기 위해 나의 프로파일을 수정할 것이다. – MarcF

+3

[자주 묻는 질문 (FAQ)] (http://stackoverflow.com/faq#promotion)을주의 깊게 읽으십시오. 특히, 게시물의 상당 부분이 판촉물이라면 그 부분을 참조하십시오. 아마도 잘못된 이유 때문일 수 있습니다. 또한 자신의 사이트/제품에 링크 할 때마다 면책 조항을 게시하는 것이 필수적입니다. –