(.NET) NetworkComms

C#/Winform 2017. 4. 28. 02:06
728x90

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. 적용 - 직렬화

DataSerializer serializer = DPSManager.GetDataSerializer<JsonSerializer>();
// 지정된 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

서버 동작 후 클라이언트 여러대를 띄워 채팅 가능하도록 만듦

K.zip

 

 

 

 


 

728x90

'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
Posted by kjun.kr
,