1. 소개
- 고성능 네트워크 기능을 이용해 .Net 제품에 사용가능 하도록 개발된 라이브러리
- 여러 플랫폼에서 통신이 가능
- 자체적인 API 를 제공, 오픈 소스
https://github.com/MarcFletcher/NetworkComms.Net
- 통신 방식, 암호화 방법, 직렬화 방식을 선택가능
- But.. 2014년 3월 29일 3.0.0 이 마지막 버전.
http://www.networkcomms.net/
2. 기능
- 1Gbpa 이상의 데이터 속도로 1000개 이상의 연결 지원
- Net2 +, Mono, Unity3d, Xamarin.iOS, Xamarin.Android, Windows Phone 8, Windows RT 등의 다양한 플랫폼 지원
- UDP, TCP 및 블루투스 지원
************************************
Server to Clients – One to Many
Peer to Peer – Many to Many
Cloud to Client – Many to One
************************************
3. 적용 - 서버
- 서버만들기 (Receive)
NetworkComms.AppendGlobalIncomingPacketHandler<string>("Message", ReceiveMessage);
// 통신방식을 지정하고 서버를 시작합니다.
Connection.StartListening(ConnectionType.TCP, new System.Net.IPEndPoint(System.Net.IPAddress.Any, port));
// 메시지가 들어온 경우 처리 로직을 작성합니다.
private static void ReceiveMessage(PacketHeader header, Connection connection, string message)
{
}
=> Server 를 중지하고자 할 때
// Server 를 중단합니다.
NetworkComms.Shutdown();
- 서버만들기 (Receive $ Reply)
NetworkComms.AppendGlobalIncomingPacketHandler<string>("Message", ReceiveReplyMessage);
// 통신방식을 지정하고 서버를 시작합니다.
Connection.StartListening(ConnectionType.TCP, new System.Net.IPEndPoint(System.Net.IPAddress.Any, port));
// 메시지가 들어온 경우 처리 로직을 작성합니다.
private static void ReceiveReplyMessage(PacketHeader header, Connection connection, string message)
{
// 다시 전달할 메시지를 정의하여 보냅니다.
connection.SendObject<string>("ReturnMessage", “Server Send”);
}
4. 적용 - 클라이언트
- 클라이언트 만들기 (Send)
NetworkComms.SendObject<string>("Message",serverIp, serverPort, “content");
- 클라이언트 만들기 (Send & Receive)
String receivedData = NetworkComms.SendReceiveObject<string, string>( “Message”,serverIp, serverPort, “ReturnMessage”, 1200, “content”);
* “Message” : 보낼 데이터에 대한 키 정보입니다.
* “ReturnMessage” : 받을 데이터에 대한 키 정보입니다.
* 1200 : timeout(millisecond)
5. 적용 - 직렬화
// 지정된 serializer를 사용하도록 기본 보내기 수신 옵션을 설정합니다. // 이전 기본값에서 DataProcessors 및 Options 유지
NetworkComms.DefaultSendReceiveOptions = new SendReceiveOptions(serializer, NetworkComms.DefaultSendReceiveOptions.DataProcessors, NetworkComms.DefaultSendReceiveOptions.Options);
* ProtobufSerializer, JsonSerializer, NullSerializer, BinaryFormaterSerializer
6. 적용 - 암호화
RijndaelPSKEncrypter.AddPasswordToOptions(NetworkComms.DefaultSendReceiveOptions.Options, "kjun");
// RijndaelPSKEncrypter 데이터 프로세서를 sendReceiveOptions에 추가합니다
NetworkComms.DefaultSendReceiveOptions.DataProcessors.Add(DPSManager.GetDataProcessor<RijndaelPSKEncrypter>());
* Rijndael : 미국 NIST가 차세대 암호화표준으로 선정한 알고리즘
7. 장단점
- 장점
접근이 쉽다.
네트워크 세부 기술을 몰라도 된다.
코드가 간단하다.
통신에 필요한 api 가 있어 암호화 및 직렬화 처리에 용이 하다.
UDP 가 지원된다.
- 단점
http 가 불가능하다.
내부 네트웍크 용으로만 적합하다.
구글링 하면 많이 안 나온다.
모두 코드로 구현해야 한다.
.NET 에 제한적이다.
8. 참고사이트
Forum http://www.networkcomms.net/network-library-support/
Xamarin https://components.xamarin.com/view/NetworkComms.Net
9. Test Program
서버 동작 후 클라이언트 여러대를 띄워 채팅 가능하도록 만듦
'C# > Winform' 카테고리의 다른 글
(.NET) Linq Merge - 링크 (0) | 2017.04.28 |
---|---|
(Bitbucket) commit 이 느려진 경우 처리방법 (0) | 2017.04.28 |
(.NET) 방화벽 해제 Code (0) | 2017.04.28 |
(.NET) networkcomms (0) | 2017.04.21 |
(.NET) Animator for WinForms (0) | 2017.04.18 |